【发布时间】:2022-08-16 04:33:35
【问题描述】:
我正在尝试从我的数据库中选择数据,并且我想检查特定子节点的值是 1 还是 0。如果它有一个 1 那么我不想显示来自该特定用户的信息。如果它为零,那么我想显示来自该特定用户的信息。
我是在我正在研究的方法之上的一种方法中完成的(我遵循了这个答案How to get child of child value from firebase in android?),我让它工作没有问题。但是我不能对我的其他方法做同样的事情,我现在整天都在尝试。
截至目前,我得到的唯一结果是列表根本没有出现。有人可以帮帮我吗 ?
有效的方法:
private void getPosts() {
followingList = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(\"Video_Posts\");
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
myPosts.clear();
//followingList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Post post = snapshot.getValue(Post.class);
if (followingList.isEmpty()) {
if (!post.getPublisher().equals(firebaseUser.getUid())) {
DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference(\"Users\");
DatabaseReference zone1Ref = zonesRef.child(post.getPublisher());
DatabaseReference zone1NameRef = zone1Ref.child(\"acc_closed\");
zone1NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Log.i(TAG, dataSnapshot.getValue(String.class));
if (dataSnapshot.getValue(String.class).equals(\"1\")) {
//Toast.makeText(getContext(), \"Account closed\", Toast.LENGTH_SHORT).show();
} else if (dataSnapshot.getValue(String.class).equals(\"0\")) {
//Toast.makeText(getContext(), \"Not closed.\", Toast.LENGTH_SHORT).show();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef
.child(\"Follow\")
.child(firebaseUser.getUid())
.child(\"following\")
.child(post.getPublisher());
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//Do something
Toast.makeText(getContext(), \"Following.\", Toast.LENGTH_SHORT).show();
} else {
//Do something else
myPosts.add(post);
Collections.shuffle(myPosts);
//Toast.makeText(getContext(), \"Something.\", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
query.addListenerForSingleValueEvent(valueEventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
//Log.w(TAG, \"onCancelled\", databaseError.toException());
}
});
} else if (myPosts == null) {
Toast.makeText(getContext(), \"Nothing.\", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getContext(), \"List is not empty.\", Toast.LENGTH_SHORT).show();
for (String id : followingList) {
assert post != null;
if (!post.getPublisher().equals(id)) {
myPosts.add(post);
Toast.makeText(getContext(), \"Something.\", Toast.LENGTH_SHORT).show();
} else if (myPosts == null) {
Toast.makeText(getContext(), \"Nothing.\", Toast.LENGTH_SHORT).show();
}
}
}
}
adapterExplorer.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
无效的方法:
private void searchUsers(String s) {
Query query = FirebaseDatabase.getInstance().getReference(\"Users\");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (search_bar.getText().toString().equals(\"\")) {
recyclerView.setVisibility(View.INVISIBLE);
}
mUsers.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference(\"Users\");
DatabaseReference zone1Ref = zonesRef.child(user.getId());
DatabaseReference zone1NameRef = zone1Ref.child(user.getAcc_closed());
//mUsers.add(user);
zone1NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapS) {
if (snapS.getKey().equals(\"1\")) {
} else if (snapS.getKey().equals(\"0\")){
//if (!snapS.exists()) {
Log.d(\"TAG\", snapS.toString());
mUsers.add(user);
//}
}
//}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.d(\"Error name\", error.getMessage());
}
});
}
userAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.d(\"Error name\", error.getMessage());
}
});
}
数据库:
\"Users\": {
\"4mFQt8Lf3CTNrQF74sy8wwyFoLh1\": {
\"acc_closed\": \"0\",
\"bio\": \"\",
\"dateAdded\": \"19-06-2022 17:28:56\",
\"date_time\": 1655674136805,
\"device_token\": \"feGjHNzaR7S8yaV2HKg0rt:APA91bEXAiYwT52niHVxR2ENrcaKXSNs11Z5ss-g2gsDwTs4wbjqjcrN4ZUmemqiMzp6SZM6UXD5TFrc1JND_DoEgd-Ni9wMeCa73EzvKBAaj5aXJf1GjgjSsTVwBg1A6VvhvVwF1VSX\",
\"fullname\": \"Brandon\",
\"id\": \"4mFQt8Lf3CTNrQF74sy8wwyFoLh1\",
\"imageurl\": \"https://firebasestorage.googleapis.com/v0/b/gone-b14f5.appspot.com/o/default.jpg?alt=media&token=befece91-9248-45ee-ab6f-b1b3d217c6b4\",
\"username\": \"bran1\",
\"verified\": \"false\"
},
编辑:
上面的代码 (searchUsers) 很有效。当我将文本放入搜索栏中时,没有任何显示。但是当我点击后退按钮并移除键盘时,数据就会显示出来。这就像我实际上在等待数据改变。
-
这段代码中究竟有什么不能按您期望的方式工作?告诉我们共享代码有什么问题。你有什么错误吗?
-
@AlexMamo 我不知道我没有得到任何错误或任何东西,但第二种方法不起作用。我期待它给我一个未删除其帐户
acc_closed == \"1\"的用户列表,但它没有向我显示任何用户 -
你怎么知道你没有得到错误?所以首先,不要再忽视他们了。请至少添加
Log.d(TAG, error.getMessage());。您是否在 logcat 中打印了一些内容? -
@AlexMamo 没有,还是什么都没有。
-
嘿@HisR.H ???? Stack Overflow 是一个出了名的低效交互式调试器,因此如果您自己进行调试然后编辑问题(下面有一个链接)以显示您得到的结果,我们很可能可以提供帮助。所以:显示更新后的
onCancelled,这样我们就可以看到您现在处理错误(正如 Alex 建议的那样),并在其他代码中添加更多Log调用,以查看执行的内容和不执行的内容,以及所有值 (重要)参数有。有了这些,我们中的一个人更有可能提供帮助。
标签: java firebase firebase-realtime-database