3 回答
TA贡献1821条经验 获得超4个赞
1)我用来提取文档 ID 的代码行不起作用,正在提取其他一些新的自动生成的 ID(我猜这是因为我在 .getId 之前使用了 .document() 方法() 方法)。
不,这是因为您两次调用 CollectionReference 的document()方法:
返回一个 DocumentReference 指向一个新文档,该文档具有此集合中自动生成的 ID。
因此,每次调用document()
方法时,都会生成一个新的 id。要解决此问题,请更改以下代码行:
mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats") .document().set(myChatFields) .addOnSuccessListener(/* ... */);
到
String id = mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats") .document().getId(); mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats") .document(id).set(myChatFields) .addOnSuccessListener(/* ... */);
看,我在引用中使用了id
第一次生成的。现在在onSuccess()
方法内部,您应该使用id
上面生成的相同内容:
myChatFields.put("chatCardId", id);
而不是更新的,就像您在实际代码中所做的那样。
2)由于某种原因,信息也没有通过我放置的最后一行代码添加到 HashMap 中。
这是因为您使用了错误的参考。使用包含正确的参考id
将解决您的问题。
TA贡献1836条经验 获得超13个赞
对于第一部分,您需要在 onSuccess 函数与 void 中获取文档引用。所以这看起来像这样 -
mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats").add(myChatFields)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
String chatId = documentReference.getId();
Log.v("CHATS", chatId);
myChatFields.put("chatCardId", chatId);
Intent goToChatActivity = new Intent(UserProfileActivity.this,
ChatActivity.class);
startActivity(goToChatActivity);
}
});
TA贡献1775条经验 获得超8个赞
您可以从集合数据中获取您的 id 作为 QuerySnapshot.Just 存储位置/id
mFirebaseStore.collection("allorder").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
try {
if (!queryDocumentSnapshots.isEmpty()) {
id = queryDocumentSnapshots.getDocuments().get(position).getId();
mArrayList.clear();
List<OrderDetails> data = queryDocumentSnapshots.toObjects(OrderDetails.class);
mArrayList.addAll(data);
mCustomerName.setText(mArrayList.get(position).getCustomerName());
mCustomerContact.setText(mArrayList.get(position).getContactNumber());
mCustomerLocation.setText(mArrayList.get(position).getArea().equals("") ? "No Location Found" : mArrayList.get(position).getArea());
mCustomerInstruction.setText(mArrayList.get(position).getSpecialInstruction().equals("") ? "Type Something" : mArrayList.get(position).getSpecialInstruction());
mTotalPrice.setText(mArrayList.get(position).getTotalPrice().equals("") ? "0" : mArrayList.get(position).getTotalPrice().toString());
String orderStatus = mArrayList.get(position).getOrderStatus();
if (orderStatus.equals("pending") || orderStatus.equals("rejected")) {
mLayout.setVisibility(View.VISIBLE);
} else if (orderStatus.equals("accepted")) {
mLayout.setVisibility(View.GONE);
}
JSONArray json = new JSONArray(mArrayList.get(position).getItemList());
List<AdminOrderDetailsModel> mList = new ArrayList<>();
for (int i = 0; i < json.length(); i++) {
JSONObject jsonObject = json.getJSONObject(i);
AdminOrderDetailsModel model = new AdminOrderDetailsModel();
model.setPackageName(jsonObject.getString("packageName"));
model.setPackageType(jsonObject.getString("packageType"));
model.setPrice(jsonObject.getString("price"));
model.setDuration(jsonObject.getString("duration"));
model.setQuantity(jsonObject.getInt("quantity"));
mList.add(model);
}
AdminOrderDetailsAdapter adapter = new AdminOrderDetailsAdapter(getApplicationContext(), mList);
setRecyclerLayoutManager(getApplicationContext(), mOrderListView, LinearLayoutManager.VERTICAL);
mOrderListView.setAdapter(adapter);
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
});
添加回答
举报