фрагмент Android с помощью onCreateView, но не могу добавить FireBase - PullRequest
0 голосов
/ 01 сентября 2018

Я создал фрагмент в своем приложении и пытаюсь добавить Firebase в этот фрагмент. Но из-за того, что он использует onCreateView, он вызывает ошибку на этом.

public class ProfileFragment extends Fragment {

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_profile, container, false);

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

}

На mCurrentUser = FirebaseAuth.getInstance (). GetCurrentUser (); я получаю сообщение об ошибке: недостижимое сообщение: есть ли способ использовать фрагмент для этого действия?

    @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view =  inflater.inflate(R.layout.fragment_profile, container, false);
    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

    String current_uid = Objects.requireNonNull(mCurrentUser).getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

    ValueEventListener valueEventListener = mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String name = dataSnapshot.child("name").getValue().toString();
            String image = dataSnapshot.child("image").getValue().toString();
            String status = dataSnapshot.child("status").getValue().toString();
            String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();

        }

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

        }

    return view;
    });}}

ошибка при возврате;

Ответы [ 4 ]

0 голосов
/ 03 сентября 2018

Пусть onActivityCreated() метод обрабатывает дополнительную работу.

ValueEventListener является внутренним классом DatabaseReference, поэтому вам не нужно создавать объект перед его созданием. Итак, удалите строку.

Также напомним, что return view; должно быть последним утверждением в вашем onCreateView(). Убедитесь, что перед закрытием у вас есть оператор return.

Теперь сделай это. После onCreateView() создайте еще одну копию и вставьте следующий код.

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);



   mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String name = dataSnapshot.child("name").getValue().toString();
            String image = dataSnapshot.child("image").getValue().toString();
            String status = dataSnapshot.child("status").getValue().toString();
            String thumb_image = 
             dataSnapshot.child("thumb_image").getValue().toString();

        }

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

        });
}
0 голосов
/ 01 сентября 2018

Переместить строку ниже перед возвратом в методе onCreateView().

 mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

Что-либо после оператора возврата недоступно, как говорится в сообщении об ошибке.

0 голосов
/ 01 сентября 2018

Обновить

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_profile, container, false);
    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
}

Для

    @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_profile, container, false);
    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    String current_uid = Objects.requireNonNull(mCurrentUser).getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

    ValueEventListener valueEventListener = mUserDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        String name = dataSnapshot.child("name").getValue().toString();
        String image = dataSnapshot.child("image").getValue().toString();
        String status = dataSnapshot.child("status").getValue().toString();
        String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();

    }

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

    }

    // you are calling return view inside the Value Listner that why you are getting the error
    });
    return view;
}
0 голосов
/ 01 сентября 2018

Просто переместите mCurrentUser = FirebaseAuth.getInstance (). GetCurrentUser () строка перед возврат оператор.

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