簡體   English   中英

在Firebase數據獲取方法中創建無限循環

[英]Creating Infinite loop in firebase data fetch method

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

如果在失敗偵聽器中再次調用發生數據提取錯誤的方法,則它可以在啟動屏幕中運行,並且啟動是否繼續……是一種正確的方法

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

由於每次發生錯誤時, addOnFailureListener()觸發addOnFailureListener()方法,這就是調用fetchdata()方法,從而導致無限循環。 這種技術稱為recursion ,但在您的情況下根本無法幫助您。 要解決此問題,請僅處理Exception並使用以下代碼,而不是調用fetchdata()方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM