7 android firebase firebase-realtime-database
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) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是当它试图读取它时会出现此错误 -
过程:com.evolutionstudios.atmiyo,PID:19506 com.google.firebase.database.DatabaseException:在反序列化时期望一个List,但在com.google.android.gms.internal.zzanp.zza上得到一个类java.util.HashMap来自com.google.android.gms.internal.zzanp.zza(未知来源)的com.google.android.gms.internal.zzanp.zza(未知来源)com.google.firebase.database.DataSnapshot上的(未知来源) .getValue(未知来源)位于com.google.android的com.evolutionstudios.atmiyo.Utils.NotificationHelper $ 1.onDataChange(NotificationHelper.java:40)com.google.android.gms.internal.zzakg.zza(未知来源) .gms.internal.zzalg.zzcxk(未知来源)位于android.os的android.os.Handler.handleCallback(Handler.java:739)的com.google.android.gms.internal.zzalj $ 1.run(未知来源) .Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:148)
任何人都可以帮我弄清楚如何将数据中的userID作为数组或列表获取?
Fra*_*len 26
错误消息包含它的要点:
在反序列化时期望一个List,但是得到了一个java.util.HashMap类
如果查看数据库,则会看到一组键+值.在Java中,转换为a Map而不是a 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();
Run Code Online (Sandbox Code Playgroud)
或者更简单:
public void onDataChange(DataSnapshot dataSnapshot) {
List<Friends> list = new ArrayList<Friends>();
for (DataSnapshot child: dataSnapshot.getChildren()) {
list.add(child.getValue(Friends.class));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7687 次 |
| 最近记录: |