Firebase - Использование addValueEventListener во фрагменте не работает - PullRequest
0 голосов
/ 08 мая 2018

Я борюсь с этой проблемой уже почти неделю, пробую все, но я не могу с собой поделать ... Фрагмент должен просто загрузить имя пользователя из узла в Базе данных в реальном времени. Код прекрасно работает в обычном Activity, но в этом фрагменте он не работает. Я думаю, что слушатель не работает должным образом, но я понятия не имею, почему: / Я надеюсь, что кто-то может помочь мне, прежде чем я сошел с ума ...

Заранее спасибо !!

База данных реального времени в Firebase выглядит следующим образом:

DatabaseName
    Users
        UID(Unique User ID)
            fullname
            username
######

Класс фрагмента, просто conCreateView ()

private FirebaseDatabase mDatabase;
private FirebaseAuth mAuth;
private String currentUserID;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootview = inflater.inflate(R.layout.fragment_profile, container, false);

    username_et = (EditText) rootview.findViewById(R.id.profile_username);
    email_et = (EditText) rootview.findViewById(R.id.profile_email);
    change_btn = (Button) rootview.findViewById(R.id.profile_change_btn);

    mAuth = FirebaseAuth.getInstance();
    mDatabase = FirebaseDatabase.getInstance();

    DatabaseReference mRef = mDatabase.getReference("Users").child(mAuth.getCurrentUser().getUid());

    mRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.e("Error","onDataChange fired!");
            String username = dataSnapshot.child("username").getValue().toString();
            username_et.setText(username);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });



    final String email = mAuth.getCurrentUser().getEmail();
    email_et.setText(email);

    return rootview;
}

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны выполнять все свои функции в методе onViewCreated, а не в onCreateView. Таким образом, выполнение setText или любого другого метода должно быть в onViewCreated

Так что в вашем случае просто переместите эту строку кода из onCreateView в метод onViewCreated-

DatabaseReference mRef = mDatabase.getReference("Users").child(mAuth.getCurrentUser().getUid());

mRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.e("Error","onDataChange fired!");
        String username = dataSnapshot.child("username").getValue().toString();
        username_et.setText(username);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});



final String email = mAuth.getCurrentUser().getEmail();
email_et.setText(email);
...