java - java.util.HashMap 无法强制转换(android studio、firebase、java)
问题描述
我在上一个部分(Java 和 Firebase)上被困了两天。
我在数据库中保留了一个类类型列表,但是当我尝试将其发送到 Firebase 时出现错误。
这是代码:
ArrayList<PostDetails_class> cPostList=new ArrayList<PostDetails_class>();
FirebaseDatabase.getInstance().getReference().addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
cPostList= (ArrayList<PostDetails_class>) snapshot.child( "application_details" ).child( "community_postsList" ).getValue();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
} );
这是从“cPost_List”列表中读取数据的尝试,该列表是从“PostDetails_class”类构建的列表。(“community_postsList”是“PostDetails_class”类的子列表):
PostDetails_class postDetails_class=cPostList.get( 0 ); //line 123 in main activity
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapp, PID: 1938
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.myapp.PostDetails_class
at com.example.myapp.MainActivity.makeList(MainActivity.java:123)
解决方案
当您在getValue()
不传递任何参数的情况下调用时,Firebase 会返回数据的本机类型,在本例中为Map<String, Object>
.
您需要通过在对 的调用中指定要返回的类来告诉 Firebase 要返回的类getValue
,例如:getValue(PostDetails_class.class)
。
Firebase 无法按照您要求的方式返回通用列表,因为返回了列表的类型。我通常更喜欢循环子节点,并一一提取它们:
ArrayList<PostDetails_class> cPostList=new ArrayList<PostDetails_class>();
FirebaseDatabase.getInstance().getReference("application_details/community_postsList").addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren()) {
PostDetails_class value = child.getValue(PostDetails_class.class);
cPostList.add(value);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});
您会注意到我还更改了代码以从更深的节点加载数据,而不是加载整个数据库。
如果您想一次性获取整个列表,这是可能的,但您需要为列表提供一个通用类型指示符。我建议在有关 [ firebase-realtime-database][android] generictypeindicator的这些问题中阅读更多内容。
推荐阅读
- java - 如何使用 spring 和 thymeleaf 使用两个单独的表单?
- excel - IF 来自多个工作表的函数数据粘贴到空白工作表 VBA
- javascript - 谷歌地图身份验证通过 url 泄露数据
- amazon-redshift - 任何从 Snowflake 迁移到 Redshift 的人
- sql - 我如何找到只属于一个食谱的成分?
- elasticsearch - Elasticsearch 中的唯一性检查,无需不断刷新索引
- html - 为什么 col-md-5 不允许图像占据 div 的全宽?
- powershell - 如何使用powershell获取docker内部服务的状态
- java - 输入只有整数和小数部分时检查双精度值
- owl - 如何对具有属性链的类进行推理