gpt4 book ai didi

android - Firebase [Android] 从数据库获取列表到 map ?

转载 作者:行者123 更新时间:2023-11-29 14:44:43 25 4
gpt4 key购买 nike

我的 Firebase 数据库中的用户可以有其他用户的 friend 。这是它的结构:

users
|
|---123
| |
| |---username: "Adam Sandler"
| |
| |---friendlist
| |
| |---456: true
| |
| |---789: true
|---456
| |
| |---username: "Chris Rock"
|
|---789
: |
: |---username: "Kevin James"

我想将 friendlist 部分加载到 map 中,然后将其加载到 recyclerview 中。这是来 self 的 fragment :

FirebaseDatabaseReference = FirebaseDatabase
.getInstance()
.getReference(
FirebaseAuth.getInstance().getCurrentUser().getUid() //Lets say this equals "123"
);
mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendList, FriendViewHolder>(
FriendList.class,
R.layout.friend_view,
FriendViewHolder.class,
mFirebaseDatabaseReference.child("friendlist")
) {
@Override
protected void populateViewHolder(FriendViewHolder viewHolder, FriendList model, int position) {
viewHolder.getTextView.setText(getRef(position).getKey().toString());
}
};

这是其他类:

public final class FriendViewHolder extends RecyclerView.ViewHolder{

private TextView textView;

public FriendViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.friendTextView);
}

public TextView getTextView() {
return textView;
}

}

和:

public class FriendList {

private Map<String, Boolean> map;

public FriendList(){}

private Map<String, Boolean> getMap(){
return map;
}

}

当我运行应用程序时,recyclerview 是空的。有什么建议我可能需要在这里做什么吗?

编辑:

我收到这个警告:

W/FirebaseRecyclerAdapter: com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied
at com.google.firebase.database.DatabaseError.toException(Unknown Source)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onCancelled(FirebaseRecyclerAdapter.java:224)
at com.fishindustries.bellyflop.adapter.UserFirebaseRecyclerAdapter.onCancelled(UserFirebaseRecyclerAdapter.java:44)
at com.firebase.ui.database.FirebaseRecyclerAdapter$1.onCancelled(FirebaseRecyclerAdapter.java:108)
at com.firebase.ui.database.FirebaseArray.notifyCancelledListeners(FirebaseArray.java:124)
at com.firebase.ui.database.FirebaseArray.onCancelled(FirebaseArray.java:105)
at com.google.android.gms.internal.zzbox.zza(Unknown Source)
at com.google.android.gms.internal.zzbqv.zzZT(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

在我的 Firebase 数据库规则中,我已在 /users 下设置规则以允许读取 if auth != null 和写入 if $uid == auth .uid

最佳答案

对于加载数据你必须创建

class User(){
String username;
Map <String, Boolean> friendlist;
....
}

然后从用户获取列表并创建列表。但是使用 FirebaseRecyclerAdapter 你可以给出一个用户列表!!

如果你想为一个用户创建好友列表,你需要查询 UserId 并获取适配器列表。

所以,首先不要创建 User 类或 FriendList 类。只需添加这个,一定可以工作:

     DatabaseReference userRef = FirebaseDatabase.getInstance().getReference(                                   
FirebaseAuth.getInstance().getCurrentUser().getUid());
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Object> userData = (Map<String,Object>)dataSnapshot.getValue();
Map <String, Boolean> resultMap = (Map<String,Boolean>)userData.get("friendlist");
adapter.add( new ArrayList<>(resultMap.keySet()));
}
@Override
public void onCancelled(DatabaseError databaseError){
// Logic for failure is here...
}
});

关于android - Firebase [Android] 从数据库获取列表到 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com