Как извлечь данные из фрагмента из Firestore - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь извлечь данные из Firestore во фрагмент, который использует BottomNavigationBar, в этом фрагменте я хочу отобразить данные пользователя, такие как имя, идентификатор электронной почты и т. Д. c. Но я понятия не имею, как использовать Firestore во фрагменте для извлечения данных. Может ли кто-нибудь, пожалуйста, помогите мне с этим

public class ProfileFragment extends Fragment
{

public ProfileFragment()
{ }

FirebaseAuth firebaseAuth;
FirebaseFirestore firestore;
FirebaseUser user;
String userid;
EditText name, email, num;

Хотите отобразить детали в вышеупомянутых EditTexts

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_profile, container, false);
    ImageButton setting = (ImageButton) view.findViewById(R.id.settings);

    View view1 = inflater.inflate(R.layout.fragment_profile, container, false);
    name = (EditText) view1.findViewById(R.id.nameed);


    firebaseAuth = FirebaseAuth.getInstance();
    firestore = FirebaseFirestore.getInstance();

    userid = firebaseAuth.getCurrentUser().getUid();

    final DocumentReference documentReference = firestore.collection("users").document(userid);

Попробовал использовать фрагмент кода ниже, чтобы записать данные в editext, но получил ошибка

   documentReference.addSnapshotListener((Executor) this, new EventListener<DocumentSnapshot>()
    {
        @Override
        public void onEvent(@javax.annotation.Nullable DocumentSnapshot documentSnapshot, @javax.annotation.Nullable FirebaseFirestoreException e) {
            name.setText(documentSnapshot.getString("nameed"));
        }
    });

Это была ошибка E / AndroidRuntime: FATAL EXCEPTION: main Процесс: gmail.rishabh.myapplication, PID: 8597 java .lang.ClassCastException: gmail.rishabh.myapplication.ProfileFragment не может быть приведение к java .util.concurrent.Executor

     setting.setOnClickListener( new View.OnClickListener()  {
        @Override
        public void onClick(View view)
        {
            Intent intent = new Intent(getActivity(),settings.class);
            intent.putExtra("some","some data");
            startActivity(intent);
            getActivity().finish();

        }
    });
  return view;
}

}

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Другой простой подход -

DocumentReference docRef = db.collection("users").document(userid);
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        User user = documentSnapshot.toObject(User.class);
        name.setText(documentSnapshot.getString("nameed"));
    }
});
0 голосов
/ 28 января 2020

Когда вы пытаетесь передать объект Executor и объект EventListener методу addSnapshotListener(), это означает, что вы пытаетесь использовать следующий вариант этого метода:

addSnapshotListener (Исполнитель-исполнитель, прослушиватель EventListener)

Этот метод помогает вам:

Начинает прослушивание документа, на который ссылается этот DocumentReference.

Однако в следующей строке кода:

documentReference.addSnapshotListener((Executor) this, new EventListener<DocumentSnapshot>()

Вы пытаетесь привести к этому , который фактически представляет вашу текущую активность, к Executor, что невозможно в Java. Чтобы решить эту проблему, вы должны использовать другой вариант:

addSnapshotListener (Activity Activity, слушатель EventListener)

, в котором вы должны передать как первый аргумент, Activity объект. Так что просто удалите актерский состав:

documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>()
...