Comment puis-je utiliser cette variable en dehors de requête OnCompleteListener (variable est définie en dehors OnCreate)?

Salma Eng:

J'utilise FireStore de firebase pour la sauvegarde des données. Je veux récupérer la ville de l'utilisateur et selon elle, récupérer des données spécifiques de FireStore et définir les RecyclerView. Le problème est le suivant: quand je fais une requête, je ne peux pas prendre la variable (ville) en dehors du OnCompleteListener. Dans le code ci-dessous (userCity) dans (setUpRecyclerView ()) est "" et aussi à l'extérieur où toute OnCompleteListener. Que puis-je faire?? Voici mon code:

   public class chosenSubject extends AppCompatActivity {
    private FirebaseAuth mAuth=FirebaseAuth.getInstance();
    private FirebaseUser currentUser= mAuth.getCurrentUser();
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private TextView tv;
    private String UserId =currentUser.getUid();

    private TeacherAdapter teacherAdapter;

    private static String userCity="";
    private static String city;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chosen_subject);
        tv=findViewById(R.id.tv);

        db.collectionGroup("Id").whereEqualTo("id" , UserId).get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()){
                            for (QueryDocumentSnapshot document : task.getResult()){
                                city = document.getString("city");
                            }
                        }
                        userCity = city;
                    }

                });
        setUpRecyclerView();

    }// end of onCreate


    private void setUpRecyclerView(){

        Query query =   db.collection("Users").document("Teachers").collection("Id")
                .whereEqualTo("city" , userCity);

        FirestoreRecyclerOptions < TeacherOfSubject > options = new FirestoreRecyclerOptions.Builder<TeacherOfSubject>()
                .setQuery(query, TeacherOfSubject.class)
                .build();

        teacherAdapter = new TeacherAdapter(options);

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);    //for performane reasons
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(teacherAdapter);
    }

    @Override
    protected void onStart() {
        super.onStart();
        teacherAdapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        teacherAdapter.stopListening();
    }
}// end of class
KoalaKoalified:

Au lieu d'appeler setUpRecyclerView après votre onCompleteListener, appelez dans votre onCompleteListener comme ceci:

db.collectionGroup("Id").whereEqualTo("id" , UserId).get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    for (QueryDocumentSnapshot document : task.getResult()){
                        city = document.getString("city");
                    }
                }
                userCity = city;
                setUpRecyclerView()
            }

        });

De plus, si vos opérations prennent un certain temps, envisager d'ajouter un ProgressDialog au préalable et de le rejeter après la base de données n'a sa requête.

private ProgressDialog progress;
private void showProgress(String message) {
    progress = new ProgressDialog(this);
    progress.setMessage(message);
    progress.setIndeterminate(true);
    progress.show();
}

private void hideProgress() {
    if (progress != null) {
        progress.dismiss();
    }
}

ÉDITER:

private void setUpRecyclerView(){

    Query query =   db.collection("Users").document("Teachers").collection("Id")
            .whereEqualTo("city" , userCity);

    FirestoreRecyclerOptions < TeacherOfSubject > options = new FirestoreRecyclerOptions.Builder<TeacherOfSubject>()
            .setQuery(query, TeacherOfSubject.class)
            .build();

    teacherAdapter = new TeacherAdapter(options);

    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);    //for performane reasons
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(teacherAdapter);
    teacherAdapter.startListening();

}

@Override
protected void onStart() {
    super.onStart();
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=362224&siteId=1
conseillé
Classement