2 回答

TA貢獻1883條經驗 獲得超3個贊
數據從 Firestore 異步加載,因為它可能必須從服務器檢索。為防止阻止應用程序,主要代碼在檢索數據時繼續執行。然后,當數據可用時,您onComplete會被調用。
這意味著任何需要數據中的數據的代碼都必須在方法內部onComplete,或者從那里調用。所以像:
docrefprodotti.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Prodotti prod=document.toObject(Prodotti.class);
prod.id=codiceProdottoScannerizzato;
prod.totalePezziCarrello=1;
carrelloAttuale.prodotti.add(prod);
Log.d(TAG, "PRODOTTO: " + prod.toString());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
Log.d(TAG, "CARRELLO FB: " + carrelloAttuale.size());
transaction.update(docRef, "prodotti", carrelloAttuale.getProdotti());
}
});

TA貢獻1853條經驗 獲得超6個贊
“命令更新”在調用“carrelloAttuale.prodotti.add(prod)”之前執行,因為該onComplete()
方法具有異步行為并立即返回。這意味著在數據庫更新操作完成之后的某個時間之后,偵聽器才會被調用。無法保證需要多長時間。根據您的連接速度和狀態,更新操作可能需要幾百毫秒到幾秒才能完成。
如果您想對該數據使用某些邏輯,則必須等到異步 Firebase 數據庫操作完成。這意味著您只能使用prod
偵聽器回調本身內部的對象。
添加回答
舉報