android - 无法以列表形式读取 Firebase 数据库中的数据

标签 android firebase firebase-realtime-database

firebase中的数据是这样的

data image here

我想将标记为 userId 的数据作为列表或数组获取。

我的方法是:

public static void writePostToFriends(final String userId, final String userName, final String title, final String body, final String authorPhoto){
    DatabaseReference mpostRef = FirebaseDatabase.getInstance().getReference().child("social/user/"+userId+"/friends");
    mpostRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            GenericTypeIndicator<List<Friends>> t = new GenericTypeIndicator<List<Friends>>() {};
            List<Friends> mFriends = dataSnapshot.getValue(t);
            long j = mFriends.size();
            for (long i = 0; i == j; i++){
                Friends mReadFriends = dataSnapshot.getValue(Friends.class);
                String getUid = mReadFriends.userID;
                writeNewPost(getUid, userId, userName, title, body, authorPhoto);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

但是当它尝试读取时会出现此错误 -

Process: com.evolutionstudios.atmiyo, PID: 19506 com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap at com.google.android.gms.internal.zzanp.zza(Unknown Source) at com.google.android.gms.internal.zzanp.zza(Unknown Source) at com.google.android.gms.internal.zzanp.zza(Unknown Source) at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) at com.evolutionstudios.atmiyo.Utils.NotificationHelper$1.onDataChange(NotificationHelper.java:40) at com.google.android.gms.internal.zzakg.zza(Unknown Source) at com.google.android.gms.internal.zzalg.zzcxk(Unknown Source) at com.google.android.gms.internal.zzalj$1.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148)

谁能帮我弄清楚如何以数组或列表的形式获取数据中的 userID?

最佳答案

错误消息包含其要点:

Expected a List while deserializing, but got a class java.util.HashMap

如果您查看您的数据库,您会看到一组键+值。在 Java 中转换为 Map 而不是 List

如果您只对值感兴趣,则需要在代码中处理从 MapList 的转换:

public void onDataChange(DataSnapshot dataSnapshot) {
    GenericTypeIndicator<Map<String, Friends>> t = new GenericTypeIndicator<Map<String, Friends>>() {};
    Map<String, Friends> map = dataSnapshot.getValue(t);

    // get the values from map.values();

或者更简单:

public void onDataChange(DataSnapshot dataSnapshot) {
    List<Friends> list = new ArrayList<Friends>();
    for (DataSnapshot child: dataSnapshot.getChildren()) {
        list.add(child.getValue(Friends.class));
    }
}

关于android - 无法以列表形式读取 Firebase 数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398855/

相关文章:

firebase - Firestore - 删除对象内的字段

ios - 来自 2 个节点的 Firebase 查询

ios - 如何正确构建 Firebase 数据库以方便读取和删除

android - Nexus 5 5.1 上的 OpenGL 问题

android - MediaManager.addCompletionHandler 不适用于 Android

firebase - 具有负载平衡功能的服务器端 Firebase 监听器

firebase - HostObject::get(propName:RNfirebase) 中的异常

android - Firebase RecyclerView - 添加新项目时滚动动画

android - Jetpack ComposeleadingIcon 不可见

android - 偏好是否在更新中保持不变