¿Cómo puedo usar esta variable fuera de consulta OnCompleteListener (variable se define fuera de OnCreate)?

Salma Eng:

Estoy usando FireStore base de fuego para guardar los datos. Quiero recuperar la ciudad de usuario y de acuerdo con ello, recuperar datos específicos de FireStore y establecer el RecyclerView. El problema es: cuando hago una consulta que no puedo tomar la variable (ciudad) fuera del OnCompleteListener. En el código de abajo (userCity) en (setUpRecyclerView ()) es "" y también en cualquier lugar fuera de OnCompleteListener. ¿¿Que puedo hacer?? Aquí está mi código:

   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:

En lugar de llamar setUpRecyclerView después de su onCompleteListener, llame dentro de su onCompleteListener de este modo:

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()
            }

        });

Además, si sus operaciones están tomando algún tiempo, considerar la adición de un ProgressDialog de antemano y descartarla después de la base de datos ha llegado a su consulta.

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();
    }
}

EDITAR:

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();
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=362226&siteId=1
Recomendado
Clasificación