2 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
數(shù)據(jù)從 Firestore 異步加載,因?yàn)樗赡鼙仨殢姆?wù)器檢索。為防止阻止應(yīng)用程序,主要代碼在檢索數(shù)據(jù)時(shí)繼續(xù)執(zhí)行。然后,當(dāng)數(shù)據(jù)可用時(shí),您onComplete會(huì)被調(diào)用。
這意味著任何需要數(shù)據(jù)中的數(shù)據(jù)的代碼都必須在方法內(nèi)部onComplete,或者從那里調(diào)用。所以像:
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貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
“命令更新”在調(diào)用“carrelloAttuale.prodotti.add(prod)”之前執(zhí)行,因?yàn)樵?code>onComplete()方法具有異步行為并立即返回。這意味著在數(shù)據(jù)庫(kù)更新操作完成之后的某個(gè)時(shí)間之后,偵聽器才會(huì)被調(diào)用。無(wú)法保證需要多長(zhǎng)時(shí)間。根據(jù)您的連接速度和狀態(tài),更新操作可能需要幾百毫秒到幾秒才能完成。
如果您想對(duì)該數(shù)據(jù)使用某些邏輯,則必須等到異步 Firebase 數(shù)據(jù)庫(kù)操作完成。這意味著您只能使用prod
偵聽器回調(diào)本身內(nèi)部的對(duì)象。
添加回答
舉報(bào)