![](/img/trans.png)
[英]can anyone tell me how to store geocoder address in android database using android studio?
[英]Can anyone tell me how can I store an array of custom objects in Firebase Firestore (Android)
誰能告訴我如何從一個應用程序將一組自定義對象存儲在 Firebase Firestore (Android) 中,然后將對象檢索回另一個應用程序(這兩個應用程序都連接到同一個 Firebase 項目)。 我嘗試使用地圖,並且能夠存儲訂單列表,但無法檢索 ArrayList。 我是這樣做的:
Map<String, ArrayList<OrderItemModel>> map = new HashMap<>();
map.put(currentOrderNumber, orderList);
firebaseFirestore.collection("orders").document(college).set(map, SetOptions.merge())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getContext(), "Order placed.", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), "Couldn't place order. Please try again.", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
});
當我嘗試使用 documentSnapshot.getData() 檢索它時,它返回 Map<String, Object>。 我嘗試將 Object 轉換為 ArrayList 並在 RecyclerView 適配器中使用它,但它顯示錯誤。 這是我的 OrderItemModel class:
public class OrderItemModel {
private String itemName;
private String itemPrice;
private String itemCount;
public OrderItemModel() {
}
public OrderItemModel(String itemName, String itemPrice, String itemCount) {
this.itemName = itemName;
this.itemPrice = itemPrice;
this.itemCount = itemCount;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemPrice() {
return itemPrice;
}
public void setItemPrice(String itemPrice) {
this.itemPrice = itemPrice;
}
public String getItemCount() {
return itemCount;
}
public void setItemCount(String itemCount) {
this.itemCount = itemCount;
}
}
我一直試圖解決這個問題一個星期,但仍然沒有得到任何地方。 我已經嘗試了很多東西,但仍然找不到解決方案。 如果有什么不清楚的請詢問。 請幫忙。 謝謝你。
編輯:
我正在以下列方式檢索數據:
firebaseFirestore.collection("orders").document(college).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot documentSnapshot = task.getResult();
assert documentSnapshot != null;
if (documentSnapshot.exists()) {
Map<String, Object> listMap = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : listMap.entrySet()) {
Log.d(TAG, "onComplete: Key: " + entry.getKey() + ", Value: " + entry.getValue().toString());
if (entry.getKey().equals(currentOrderNumber)) {
orderList.addAll((Collection<? extends OrderItemModel>) entry.getValue());
}
}
Log.d(TAG, "onComplete: ArrayList: " + orderList.get(0).getItemName()); // This line shows error.
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(ShowOrder.this, "Order document not found!", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(ShowOrder.this, "An error occurred while fetching the data.", Toast.LENGTH_SHORT).show();
}
}
});
據我了解,我成功地以 Map<String, Object> 的形式檢索數據,但無法從中提取 ArrayList。
Log.d(TAG, "onComplete: ArrayList: " + orderList.get(0).getItemName());
上面的行顯示以下錯誤:
2021-01-10 23:48:40.192 8747-8747/com.campuscanteen.main E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.campuscanteen.main, PID: 8747
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.campuscanteen.main.Models.OrderItemModel
at com.campuscanteen.main.ShowOrder$2.onComplete(ShowOrder.java:89)
at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:230)
at android.app.ActivityThread.main(ActivityThread.java:7815)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
編輯2:
我按照你的建議做了一個 class :
public class OrderList {
public List<OrderItemModel> modelList;
public OrderList() {
}
@Override
public String toString() {
return "OrderList{" +
"modelList=" + modelList +
'}';
}
}
並嘗試了這些行來檢索數據:
List<OrderItemModel> myLists = documentSnapshot.toObject(OrderList.class).modelList;
Log.d(TAG, "onComplete: ArrayList: " + myLists.toString()); // myLists here has null value.
這樣列表就有了 null 值。 請原諒我缺乏知識,請幫助。
您收到以下錯誤:
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.campuscanteen.main.Models.OrderItemModel
因為您正在嘗試將 HashMap 類型的 object 轉換為 OrderItemModel 類型的 object,這實際上在 ZD52817878D375A27 中是不可能的
看到您的屏幕截圖,您的文檔包含一個名為“201”的數組類型的屬性。 該數組包含術語“OrderItemModel”對象。 我不確定你為什么要這樣稱呼這個數組,因為“orderItems”可能更有意義。 但是,對於 map 數組到List<OrderItemModel>
,您應該簡單地創建一個具有單個屬性的 class :
class OrdersDocument {
public List<OrderItemModel> orderItems;
}
現在,您可以創建對文檔的引用、附加偵聽器並將數組轉換為自定義對象列表:
List<OrderItemModel> orderItems = document.toObject(OrdersDocument.class).orderItems;
正如我在以下鏈接的文章中所解釋的那樣:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.