【发布时间】:2021-08-06 00:21:50
【问题描述】:
我正在尝试从我的 FireStore 数据库中显示以下信息 对于给定用户(当前用户),我想显示他们的“匹配”(其他用户的 id 和信息) 我还尝试了不同的结构,方法是在每个用户内部都有一个匹配数组(用户 ID 字符串)。 这就是我正在尝试的:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_matches);
currentUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();
System.out.println("current user is: "+currentUserID);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setNestedScrollingEnabled(false);
// mRecyclerView.setHasFixedSize(true);
mMatchesLayoutManager = new LinearLayoutManager(MatchesActivity.this);
mRecyclerView.setLayoutManager(mMatchesLayoutManager);
mMatchesAdapter = new MatchesAdapter(getDataSetMatches(), MatchesActivity.this);
mRecyclerView.setAdapter(mMatchesAdapter);
getUserMatchId();
}
private void getUserMatchId() {
DatabaseReference matchDb = FirebaseDatabase.getInstance().getReference().child("users").child(currentUserID).child("connections").child("matches");
matchDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
for(DataSnapshot match : dataSnapshot.getChildren()){
System.out.println(match.toString());
FetchMatchInformation(match.getKey());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void FetchMatchInformation(String key) {
DatabaseReference userDb = FirebaseDatabase.getInstance().getReference().child("users").child(key);
userDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
String userId = dataSnapshot.getKey();
String name = "";
String profileIMageUrl = "";
if(dataSnapshot.child("name").getValue()!=null){
name = dataSnapshot.child("name").getValue().toString();
}
if(dataSnapshot.child("profileImageUrl").getValue()!=null){
profileIMageUrl = dataSnapshot.child("profileImageUrl").getValue().toString();
}
MatchesObject obj = new MatchesObject(userId, name, profileIMageUrl);
resultsMatches.add(obj);
mMatchesAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private ArrayList<MatchesObject> resultsMatches = new ArrayList<>();
private List<MatchesObject> getDataSetMatches() {
return resultsMatches;
}
我尝试调试一下代码,我意识到在将侦听器添加到 matchDB 后没有任何反应 如果您能告诉我为什么没有显示任何内容以及如何正确访问匹配项,那就太好了。
【问题讨论】:
标签: java database firebase android-studio google-cloud-firestore