firebase中的数据是这样的
我想将标记为 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
。
如果您只对值感兴趣,则需要在代码中处理从 Map
到 List
的转换:
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/