亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Firestore 集合中檢索文檔 ID (Android)

從 Firestore 集合中檢索文檔 ID (Android)

繁花不似錦 2021-11-24 14:47:50
我正在嘗試提取文檔下自動生成的 ID,以便我可以在其他地方使用它。這是完整的代碼:mStartChatButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            final HashMap<String, Object> myChatFields = new HashMap<>();            myChatFields.put("dateJoined", ServerValue.TIMESTAMP );            myChatFields.put("status", "");            myChatFields.put("snoozeUntil", "");            myChatFields.put("myCharacter", "");            myChatFields.put("requestedCustomChatCode", "");            myChatFields.put("groupChatName", "");            myChatFields.put("toInviteMembers", "");            myChatFields.put("lastMessage", "");            myChatFields.put("lastMessageTimeStamp", ServerValue.TIMESTAMP);            mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")                    .document().set(myChatFields)                    .addOnSuccessListener(new OnSuccessListener<Void>() {                @Override                public void onSuccess(Void aVoid) {                }            });正如您所看到的,我正在使用下面顯示的代碼生成一個名為“my-chats”的集合,而 .document() 正在創建自動生成的文檔 ID。mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")                    .document().set(myChatFields)                    .addOnSuccessListener(new OnSuccessListener<Void>() {然后我使用下面顯示的代碼行嘗試從該文檔中獲取 id。String chatId = mWhammyUsersCollection.document(mCurrentUserId)                            .collection("my-chats").document().getId();最后使用下面的代碼行,我試圖將它放入我創建的 HashMap 中。myChatFields.put("chatCardId", chatId);我有兩個主要問題:1)我用來提取文檔 ID 的代碼行不起作用,正在提取其他一些新的自動生成的 ID(我猜這是因為我在 .getId 之前使用了 .document() 方法() 方法)。2)由于某種原因,信息也沒有通過我放置的最后一行代碼添加到 HashMap 中。我該如何解決這兩個問題?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

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第一次生成的?,F在在onSuccess()方法內部,您應該使用id上面生成的相同內容:

myChatFields.put("chatCardId", id);

而不是更新的,就像您在實際代碼中所做的那樣。

2)由于某種原因,信息也沒有通過我放置的最后一行代碼添加到 HashMap 中。

這是因為您使用了錯誤的參考。使用包含正確的參考id將解決您的問題。


查看完整回答
反對 回復 2021-11-24
?
開心每一天1111

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);


            }

        });


查看完整回答
反對 回復 2021-11-24
?
www說

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());

            }


        }

    });



查看完整回答
反對 回復 2021-11-24
  • 3 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號