首页 > 解决方案 > 如果 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();
          }

      }

  }

任何帮助表示赞赏。提前致谢。在此处输入图像描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


我单击按钮 B,如果它传递了一个字符串值“xyz”,那么我没有任何数据“xyz”的值,那么它应该返回 Mainactivity,并显示 Toast 消息“未找到”

因为没有找到针对 的数据xyzfor 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) { }
});

推荐阅读