Создание бесконечного цикла в методе выборки данных Firebase - PullRequest
0 голосов
/ 05 июля 2018
private void fetchdata() {
    db.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            ArrayList<String> cities = (ArrayList) documentSnapshot.get("cities");
            i = new Intent(Splash.this, Select.class);
            i.putStringArrayListExtra("cities", cities);
            startActivity(i);
        }

    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

           /*do when the cities list is not fetch  */
            fetchdata();
        }
    });
}

Он работает в заставке, если в обработчике ошибок снова вызывается метод получения данных, и всплеск продолжается, если это ...... правильный путь

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы получаете бесконечный цикл, потому что каждый раз, когда происходит ошибка, запускается метод addOnFailureListener(), который в терминах вызывает метод fetchdata(). Эта техника называется recursion, но в вашем случае она вам совсем не помогает. Чтобы решить эту проблему, вместо вызова fetchdata() метода, просто обработайте Exception и используйте следующий код:

private void fetchdata() {
    db.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            List<String> cities = (ArrayList) documentSnapshot.get("cities");
            Intent intent = new Intent(Splash.this, Select.class);
            intent.putStringArrayListExtra("cities", cities);
            startActivity(intent);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            e.printStackTrace(); //Handle Exception
        }
    });
}
0 голосов
/ 05 июля 2018
private void fetchdata() {
    ArrayList<String> cities = new ArrayList<String>();
    i = new Intent(Splash.this, Select.class);

    db.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {

            cities = (ArrayList) documentSnapshot.get("cities");
            i.putStringArrayListExtra("cities", cities);
            startActivity(i);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

            /* simple startActivity  */
            i.putStringArrayListExtra("cities", cities);
            startActivity(i);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...