gpt4 book ai didi

java - 检查 ID 列表是否已存在于数据库 Firebase ( Android ) 中

转载 作者:行者123 更新时间:2023-12-02 05:59:29 25 4
gpt4 key购买 nike

您好,我为我的高中创建了一个小型社交网络,我使用 android studio 和 firebase 作为数据服务器。我的用户信息数据库结构-/(用户)
- /詹姆士/
–-/詹姆斯-uid/
- /大卫/
–-/james-uid/

我添加了阻止用户的可能性。我的数据库是结构化的

-/(根)
-/UsersIblocked/
–-/詹姆斯-uid/
--/jake-uid/
--/大卫-uid/
--/卡尔-uid/
,现在我希望当我的应用程序显示帖子时,我们阻止的用户的出版物不会出现。为了使出版物出现,我使用此代码(此代码应获取发布帖子的人的 uid,并查看此 uid 是否在我们的阻止列表中,如果存在,则不应发布该帖子)

 mAuth = FirebaseAuth.getInstance();

ArrayList<PostClass> PostArray= new ArrayList<>();
Listview = new PostAdapter(getActivity(),R.layout.itempost, PostArray );

mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Log.d(TAG, "getPost: found post user: " + snapshot);
PostClass post = snapshot.getValue(PostClass.class);

DatabaseReference blockDatabase = FirebaseDatabase.getInstance().getReference().child("BlockedUsers").child("UsersIBlocked").child(mAuth.getCurrentUser().getUid());
blockDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.child(post.getuid).exists()){
PostArray.add(post);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Collections.reverse(PostArray);

Listview.notifyDataSetChanged();
}

@Override
public void onCancelled(DatabaseError databaseError) {
}
});

Post 是我用来接收出版物数据的类,post.getuid 为我提供了发布出版物的人的 uid

但是当我使用此代码时没有任何反应,所以如果有人可以帮助我,谢谢

最佳答案

只要 ListView 的数据集发生更改,您就应该调用Listview.notifyDataSetChanged();。由于您要在嵌套的 addListenerForSingleValueEvent 中加载数据,因此您应该在该监听器的 onDataChange() 中调用它:

        blockDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.child(post.getuid).exists()){
PostArray.add(post);
Listview.notifyDataSetChanged();
}
}
...

另请注意,将 onCancelled 留空是非常糟糕的做法,因为它隐藏了潜在的问题。最简单的实现是:

public void onCancelled(@NonNull DatabaseError databaseError) { 
throw databaseError.toException();
}

关于java - 检查 ID 列表是否已存在于数据库 Firebase ( Android ) 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987382/

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