[英]Android studio/Firebase - hitting an infinite loop trying to fetch data
[英]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.