java - 如果 Firebase 数据库没有子节点,则返回 Mainactivity
问题描述
我陷入了一个问题。我的 firebase 结构在图像中给出,其中主题是子值,我通过点击按钮获得额外的意图
考虑我有两个按钮按钮 A 和按钮 B
当我按下按钮 A 时,它会将主题作为“Bhaktapur”的字符串值发送,现在我在 Recycleview 中有 Bhaktapur 的详细信息,但是当我单击按钮 B 时,如果它传递了一个字符串值“xyz”,那么我没有任何数据值“ xyz”然后它应该返回到 Mainactivity 并带有 Toast 消息“未找到”
但第一个工作正常,recycleview 更新了信息,但在第二种情况下,我有进度对话框一直加载,直到我取消它。
这是我的代码
dbreference =
FirebaseDatabase.getInstance().getReference("books").child(subject);
dbreference.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot data : snapshot.getChildren()) {
if (!data.exists()) {
progressDialog.dismiss();
Toast.makeText(SubjectBooks.this, "No books
found!", Toast.LENGTH_SHORT).show();
Intent in = new Intent(SubjectBooks.this,
MainActivity.class);
startActivity(in);
finish();
} else {
final Books b1 = data.getValue(Books.class);
// Log.e("Value is ",dataSnapshot.getKey()+"
"+b1.getBauthor());
//Log.e("Book"," received");
child_count++;
list.add(b1);
staggeredBooksAdapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}
}
解决方案
我单击按钮 B,如果它传递了一个字符串值“xyz”,那么我没有任何数据“xyz”的值,那么它应该返回 Mainactivity,并显示 Toast 消息“未找到”
因为没有找到针对 的数据xyz
,for loop
也不会执行if-else
。当您关闭里面的进度条if-else
时,它会无限期地显示。所以你必须检查DataSnapshot
之前是否存在for loop
,如下所示
dbreference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
// TODO: handle the case where the data exists
for (DataSnapshot data : snapshot.getChildren()) {
final Books b1 = data.getValue(Books.class);
// Log.e("Value is ",dataSnapshot.getKey()+"
"+b1.getBauthor());
//Log.e("Book"," received");
child_count++;
list.add(b1);
staggeredBooksAdapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}
else {
// TODO: handle the case where the data does not yet exist
progressDialog.dismiss();
Toast.makeText(SubjectBooks.this, "No books
found!", Toast.LENGTH_SHORT).show();
Intent in = new Intent(SubjectBooks.this,
MainActivity.class);
startActivity(in);
finish();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
推荐阅读
- r - 使用分层套索(hierNet)的可变重要性
- java - 任务“:bootRun”执行失败。CreateProcess error=206, 文件名或扩展名太长
- c++ - 尝试在 C++ 中更改主函数内的全局变量值时出现编译错误
- typoscript - Typo3 找出错字链接是外部的还是内部的?
- laravel - 尝试通过默认 laravel Auth 注册多个用户
- android - 使用 intent.putExtra 将数据传递给小部件 ListView 不起作用。(使用 RemoteViewsFactory)
- node.js - 我将如何处理 node.js 博客上的管理员?
- javascript - 从 Excel 呈现数据时,时间格式以 JSON 中的数字形式出现
- javascript - 如何解决承诺?
- java - 如何解决这个未经检查的分配警告?