![](/img/trans.png)
[英]java.util.HashMap cannot be cast to java.util.ArrayList
[英]java.util.HashMap cannot be cast (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”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 什么 class 通過在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();
}
});
您會注意到我還更改了代碼以從更深的節點加載數據,而不是加載整個數據庫。
如果您想在一個 go 中獲取整個列表,這是可能的,但您需要列表的通用類型指示器。 我建議在有關 [ firebase-realtime-database][android] generictypeindicator的這些問題中閱讀更多內容。
ArrayList<PostDetails_class> cPostList=new ArrayList<PostDetails_class>();
Firebase 返回HashMap
,因此您無法將其接收到ArrayList
所以你需要將cPostList
的類型更改為HashMap<Integer, PostDetails_class>
HashMap<Integer, PostDetails_class> cPostList = new HashMap<>();
FirebaseDatabase.getInstance().getReference().addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
cPostList= (HashMap<Integer, PostDetails_class>) snapshot.child( "application_details" ).child( "community_postsList" ).getValue();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
} );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.