Android Firebase addListenerForSingleValueEvent передать значение - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть кнопка во фрагменте, которая при нажатии должна проверить, существуют ли данные в базе данных Firebase или нет.Ниже приведена функция в отдельном файле класса, которая будет вызываться по нажатию кнопки в асинхронной задаче.

Как вернуть логическое значение true / false из addListenerForSingleValueEvent обратно в асинхронную задачу фрагмента?

void checkDataExists(final String mobile){
DatabaseReference fireDBRef = FirebaseDatabase.getInstance().getReference(context.getString(R.string.app_name);

fireDBRef.addListenerForSingleValueEvent(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                 String mob = 
     String.valueOf(dataSnapshot.child(context.getString(R.string.tracked_mobile))
                             .getValue());
                             
                //compare the strings mobile 
                 boolean match = mobile.equals(mob);

                // return match value to fragment to update the view.
                }

                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {
                     Log.w(TAG + "/checkDataExists","Data read from DB failed: " + databaseError.getMessage());
                 }
             });
         }

1 Ответ

0 голосов
/ 06 декабря 2018

У меня также есть такой случай, и я создаю свой собственный обратный вызов, например:

public interface IMyCallback {
    void onSuccess(boolean isExist);
    void onFailure(String error);
}

Теперь, когда я вызываю функцию checkDataExists, она выглядит следующим образом:

checkDataExists(mobile, new ISingUpCallback() {
                @Override
                public void onSuccess(boolean isExist) {

                }

                @Override
                public void onFailure(String error) {

                }
            });

И вваш чек, вам нужно внести изменения, такие как:

    void checkDataExists(final String mobile, final IMyCallback callback){
    DatabaseReference fireDBRef = FirebaseDatabase.getInstance().getReference(context.getString(R.string.app_name);

    fireDBRef.addListenerForSingleValueEvent(new ValueEventListener() {
                     @Override
                     public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     String mob = 
         String.valueOf(dataSnapshot.child(context.getString(R.string.tracked_mobile))
                                 .getValue());

                    //compare the strings mobile 
                     boolean match = mobile.equals(mob);

                    // return match value to fragment to update the view.
                    callback.onSuccess(match);
                    }

                     @Override
                     public void onCancelled(@NonNull DatabaseError databaseError) {
                         callback.onFailure(databaseError.getMessage());
                     }
                 });
             }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...