我试图将一个模型插入到另一个模型中,这些模型的数据来自Firestore。我尝试了回调方法,但是找不到数据不会循环的方法。
这是我的数据库的结构
basketProductsModelList.add(new BasketProductsModel( "image", "prodtitle", 25, 19.00, 25.00, "prodID"));
List<CartItemModel> cartItemModelsList = new ArrayList<>();
cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.yumin, 2, "Yumin","12345", "percent", 5));
cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.puregold, 0, "Puregold", "", "", 0));
CartAdapter cartAdapter = new CartAdapter(cartItemModelsList);
cartItemRecyclerView.setAdapter(cartAdapter);
cartAdapter.notifyDataSetChanged();
这是我尝试过的回调。我的问题是,当我使用prodID
获取for loop
的数据时,我不知道可以在哪里放置
CartAdapter cartAdapter = new CartAdapter(cartItemModelsList);
cartItemRecyclerView.setAdapter(cartAdapter);
cartAdapter.notifyDataSetChanged();
编辑:
我在finalData
中包含了适配器,但没有收到任何错误,但是输出是重复的。
如果将其放置在外部,则因为firestore是异步的,所以无法获取模型的数据。
finalData(new finalCallback() {
@Override
public void onCallback(final List<String> prodID, List<Integer> prodQuantity) {
for (int n = 0; n < prodID.size(); n++){
final int quantity = prodQuantity.get(n);
final String prodIDs = prodID.get(n);
db.collection("Products").document(prodIDs).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot snapshot2 = task.getResult();
String prodName = snapshot2.get("productName").toString();
String prodImage = snapshot2.get("productImage.image_1").toString();
boolean bargainSale = (boolean) snapshot2.get("Bargain.bargainStatus");
long prodPrice = (long) snapshot2.get("productPrice");
double oldPrice = (double) prodPrice;
if (bargainSale) {
long discountValue = (long) snapshot2.get("Bargain.discountValue");
double newDsct = (int) discountValue;
double discountPoint = newDsct / 100;
double dp = prodPrice * discountPoint;
double newPrice = prodPrice - dp;
basketProductsModelList.add(new BasketProductsModel(prodImage, prodName, quantity, oldPrice, newPrice, prodIDs));
} else {
long productCuttedPrice = (long) snapshot2.get("productCuttedPrice");
double oldProdPrice = (double) productCuttedPrice;
basketProductsModelList.add(new BasketProductsModel(prodImage, prodName, quantity, oldPrice, oldProdPrice, prodIDs));
}
cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.puregold, 0, "Puregold", "", "", 0));
CartAdapter cartAdapter = new CartAdapter(cartItemModelsList);
cartItemRecyclerView.setAdapter(cartAdapter);
cartAdapter.notifyDataSetChanged();
}
}
});
}
}
});
private void finalData(final finalCallback finalCallback){
readData(new FirestireCallback() {
@Override
public void onCallback(List<String> storeIDS, String uid) {
for (int n = 0; n < storeIDS.size(); n++){
String storeID = storeIDS.get(n);
db.collection("Baskets").document(uid).collection("Store_Baskets")
.document(storeID).collection("Basket_Products").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
List<String> prodID = new ArrayList<>();
List<Integer> prodQuan = new ArrayList<>();
for (DocumentSnapshot snapshot: task.getResult()){
String id = snapshot.getId();
long productQuantity = (long) snapshot.get("productQuantity");
final int quantity = (int) productQuantity;
prodID.add(id);
prodQuan.add(quantity);
}
finalCallback.onCallback(prodID, prodQuan);
}
}
});
}
}
});
}
private void readData(final FirestireCallback firestireCallback){
Intent intent = getIntent();
final String UserID = intent.getStringExtra("userid");
db.collection("Buyers")
.whereEqualTo("buyerID", UserID)
.limit(1)
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
String uid = "";
for (DocumentSnapshot snapshot: task.getResult()){
uid = snapshot.getId();
}
final String finalUid = uid;
db.collection("Baskets").document(uid).collection("Store_Baskets")
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
List<String> storeIDs = new ArrayList<>();
for (DocumentSnapshot snapshot: task.getResult()){
String storeID = snapshot.getId();
storeIDs.add(storeID);
}
firestireCallback.onCallback(storeIDs, finalUid);
}
}
});
}
}
});
}
private interface finalCallback {
void onCallback(List<String> prodID, List<Integer> prodQuantity);
}
private interface FirestireCallback {
void onCallback(List<String> storeIDS, String uid);
}