Вернитесь в Mainacctivity, если у базы данных Firebase нет детей - PullRequest
0 голосов
/ 14 января 2019

Я застрял в одной проблеме. Моя структура firebase дана на изображении, где subject - это дочернее значение, которое я получаю, используя намерение дополнительно при нажатии кнопки

считают, что у меня есть две кнопки: кнопка A и кнопка B

когда я нажимаю кнопку A, тогда он отправляет тему как строковое значение «Bhaktapur», и теперь у меня есть сведения о Bhaktapur в Recycleview, но когда я нажимаю кнопку B, если она передает строковое значение «xyz», тогда у меня нет никакого значения с данными "xyz", то он должен вернуться в Mainactivity с сообщением Toast "Not Found"

Но первый работает нормально, и 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();
          }

      }

  }

Любая помощь приветствуется. Заранее спасибо. enter image description here

1 Ответ

0 голосов
/ 14 января 2019

Я нажимаю кнопку 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) { }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...