ValueEventListener выполняет код бесконечно - PullRequest
0 голосов
/ 20 мая 2019

Мой код проверяет, равняется ли значение в базе данных тому, который сканировал штрих-код, все работает, но Toast или SetValue происходят бесконечно, пока камера на Qrcode не выполнит другое действие из ValueEventListener. Я не могу, поэтому я не знаю, каквыполнить этот код только один раз.

Вот мой код, где происходит этот процесс

 // Called when a QR is decoded
// "text" : the text encoded in QR
  // "points" : points where QR control points are placed
  @Override
  public void onQRCodeRead(String text, PointF[] points) {
   pointsOverlayView.setPoints(points);

    DatabaseReference rootRef =          FirebaseDatabase.getInstance().getReference();
  DatabaseReference coinsUidRef =   rootRef.child("coinsUid").child(text);


  ValueEventListener valueEventListener = new ValueEventListener()    {
     @SuppressWarnings("ConstantConditions")
  @Override
  public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    Log.v(text,""+dataSnapshot);
    if (!dataSnapshot.exists()) {
      Toast toast = Toast.makeText(getApplicationContext(),
              "Ошибка считвания! Считайте снова", Toast.LENGTH_SHORT);
      toast.show();


    } else {
      long qrCoinsAmount = dataSnapshot.getValue(Long.class);
      DatabaseReference coinsAmountRef = rootRef.child("users").child(getUid()).child("coinsAmount");
      ValueEventListener valueEventListener = new ValueEventListener() {


        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
          long coinsAmount = dataSnapshot.getValue(Long.class);
          coinsAmountRef.getRef().setValue(coinsAmount + qrCoinsAmount);
           coinsUidRef.removeValue();



        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
      };
      coinsAmountRef.addListenerForSingleValueEvent(valueEventListener);


    }


  }

  @Override
  public void onCancelled(@NonNull DatabaseError databaseError) {

  }

};
coinsUidRef.addListenerForSingleValueEvent(valueEventListener);

}

Мой журнал

   V   /http://erwe: DataSnapshot { key = erwe, value = null }
   V/http://erwe: DataSnapshot { key = erwe, value = null }
   I/Toast: Show toast from OpPackageName:com.example.ecohelp, PackageName:com.example.ecohelp
 V/http://erwe: DataSnapshot { key = erwe, value = null }
 V/http://erwe: DataSnapshot { key = erwe, value = null }
  I/Toast: Show toast from OpPackageName:com.example.ecohelp,     PackageName:com.example.ecohelp
 V/http://erwe: DataSnapshot { key = erwe, value = null }
V/http://erwe: DataSnapshot { key = erwe, value = null }
 I/Toast: Show toast from OpPackageName:com.example.ecohelp,   PackageName:com.example.ecohelp
  I/Toast: Show toast from OpPackageName:com.example.ecohelp,      PackageName:com.example.ecohelpV/http://erwe: DataSnapshot { key = erwe, value = null }
         V/http://erwe: DataSnapshot { key = erwe, value = null }
     I/Toast: Show toast from OpPackageName:com.example.ecohelp,   PackageName:com.example.ecohelp
    V/http://erwe: DataSnapshot { key = erwe, value = null }
       V/http://erwe: DataSnapshot { key = erwe, value = null }
      I/Toast: Show toast from OpPackageName:com.example.ecohelp,    PackageName:com.example.ecohelp
       V/http://erwe: DataSnapshot { key = erwe, value = null }
          V/http://erwe: DataSnapshot { key = erwe, value = null }
        I/Toast: Show toast from OpPackageName:com.example.ecohelp, PackageName:com.example.ecohelp
     I/Toast: Show toast from OpPackageName:com.example.ecohelp,      PackageName:com.example.ecohelp

PS Я просто удаляю это значение из базы данных итеперь значения в базе данных теперь меняются только один раз (как мне нужно), но Toast по-прежнему отображается бесконечно

1 Ответ

2 голосов
/ 20 мая 2019

попробуйте с удалением Value Listener внутри onDataChange

ref.removeEventListener(this);

Поэтому удалите Event Listener из обеих ссылок в DataChange callback.Посмотрите на этот ответ

removeEventListener не удаляет слушателя в firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...