Невозможно применить addOnSuccessListener к фрагменту - PullRequest
0 голосов
/ 25 ноября 2018

Я не могу добавить любого слушателя после окончания onCanelled Listener. На самом деле, я хочу выполнить некоторую задачу после получения данных из снимка, для которого мне нужен onSuccessListener, и я не могу добавить, что

public UserFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_user, container, false);


    myUserDataList = new ArrayList<>();

    userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    databaseReference = FirebaseDatabase.getInstance().getReference("/Users/");


    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren())
            {
                if (Objects.equals(dataSnapshot1.getKey(), userId))
                {
                    MyUserData myUserData = dataSnapshot1.getValue(MyUserData.class);
                    myUserDataList.add(myUserData);
                }
            }
        }

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

        }
    }); // Problem over here

1 Ответ

0 голосов
/ 25 ноября 2018

Метод addListenerForSingleValueEvent не возвращает Task, поэтому вы не можете подключить к нему прослушиватель успеха.

Если вам нужно запустить какой-то код после загрузки данных, поставьтеэтот код в методе onDataChange.Если код должен также работать, если слушатель отклонен правилами безопасности на стороне сервера, также добавьте / вызовите тот же код из onCancelled.

Так что-то вроде:

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren())
        {
            if (Objects.equals(dataSnapshot1.getKey(), userId))
            {
                MyUserData myUserData = dataSnapshot1.getValue(MyUserData.class);
                myUserDataList.add(myUserData);
            }
        }
        onResponseReceived();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.w(TAG, "Error listening for data: "+databaseError.toString());
        onResponseReceived();
    }

    private void onResponseReceived() {
      ... do what you need to do here ...
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...