Java 如果Firebase数据库没有子级,则返回Mainactivity

Java 如果Firebase数据库没有子级,则返回Mainactivity,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我陷入了一个问题。我的firebase结构在图片中给出,其中subject是我通过单击按钮获得的子值 假设我有两个按钮按钮A和按钮B 当我按下按钮A时,它将发送主题作为“Bhaktapur”的字符串值,现在我在Recycleview中有Bhaktapur的详细信息,但当我点击按钮B时,如果它传递字符串值“xyz”,那么我没有数据“xyz”的任何值,那么它应该返回到带有Toast消息“Not Found”的Mainactivity 但第一个工作正常,recycleview会更新信息,但在第二个情况

我陷入了一个问题。我的firebase结构在图片中给出,其中subject是我通过单击按钮获得的子值

假设我有两个按钮按钮A和按钮B

当我按下按钮A时,它将发送主题作为“Bhaktapur”的字符串值,现在我在Recycleview中有Bhaktapur的详细信息,但当我点击按钮B时,如果它传递字符串值“xyz”,那么我没有数据“xyz”的任何值,那么它应该返回到带有Toast消息“Not Found”的Mainactivity

但第一个工作正常,recycleview会更新信息,但在第二个情况下,我有进度对话框会一直加载,直到我取消它

这是我的密码

dbreference=
FirebaseDatabase.getInstance().getReference(“书籍”).child(主题);
dbreference.addListenerForSingleValueEvent(新
ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
对于(DataSnapshot数据:snapshot.getChildren()){
如果(!data.exists()){
progressDialog.disclose();
Toast.makeText(SubjectBooks.this,“没有书
找到!”,Toast.LENGTH\u SHORT.show();
意向输入=新意向(SubjectBooks.this,
主要活动(课堂);
星触觉(in);
完成();
}否则{
最终图书b1=data.getValue(Books.class);
//Log.e(“值为”,dataSnapshot.getKey()+”
“+b1.getbautor());
//Log.e(“簿记”、“收到”);
child_count++;
列表。添加(b1);
交错的BooksAdapter.notifyDataSetChanged();
progressDialog.disclose();
}
}
}
我点击按钮B,如果它传递一个字符串值“xyz”,那么我没有任何 数据为“xyz”的值,则它应返回到带有Toast的Mainactivity 消息“未找到”

由于未找到针对
xyz
for loop
的数据,因此将不会执行
if else
。当您在
if else
中取消进度条时,它将无限期地显示。因此,您必须检查
for loop
之前是否存在
DataSnapshot
,如下所示

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) { }
});

我认为在遍历所有结果之前,应该检查数据是否存在,因为如果快照中没有项目,for循环中不会执行任何内容。