簡體   English   中英

在 Users 集合中創建一個朋友子集合,Cloud Firestore

[英]Create a friend sub-collection in the Users collection, Cloud Firestore

我有一個“用戶”集合,其注冊方法如下:

public class UserHelper  {

    public static final String COLLECTION_NAME = "USERTABLE";

    public  static CollectionReference getUserCollection(){
        return FirebaseFirestore.getInstance().collection(COLLECTION_NAME);
    }

    public static Task<Void> createUser(String uid, String email, String password, String pseudo, String photo_url,boolean statut){
        Usermodele usermodele = new Usermodele(uid,email,password,pseudo,photo_url,statut);

        return UserHelper.getUserCollection().document(uid).set(usermodele);
    }

對於這個 class,我想創建一個子集合“AmisHelper”,我這樣做是為了創建子集合,但似乎有些事情不會發生。

public class AmiHelper {

    private static final String COLLECTION_NAME = "AMISCOLLECTION";

    public static CollectionReference getAmiCollection(){
        return FirebaseFirestore.getInstance().collection(COLLECTION_NAME);
    }

    public static Task<Void> createAmi(String idDemandeur, String idReceveur, String pseudo, String photo_url, String date_amitie){
        AmisModele amisModele = new AmisModele(idDemandeur,idReceveur,pseudo,photo_url,date_amitie);

        return UserHelper.getUserCollection().document(idDemandeur).collection("AMISCOLLECTION").document(idReceveur).set(amisModele);
    }

在使用時,我這樣做了

        holder.boutonAjouter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(holder.itemView.getContext(), "clic position"+ position, Toast.LENGTH_SHORT).show();
             UserHelper.getUserCollection().document(uid).collection("AMISCOLLECTION").document(uid).set(uid,uid,"","","");
            }
        });

我可能做了一些不正常的事情

當我點擊“添加”按鈕時,我有這個:

java.lang.IllegalArgumentException: Invalid data. Data must be a Map<String, Object> or a suitable POJO object, but it was of type: java.lang.String
        at com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData(com.google.firebase:firebase-firestore@@21.4.1:234)
        at com.google.firebase.firestore.UserDataReader.parseSetData(com.google.firebase:firebase-firestore@@21.4.1:75)
        at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@21.4.1:166)
        at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@21.4.1:146)
        at com.google.firebase.firestore.CollectionReference.add(com.google.firebase:firebase-firestore@@21.4.1:121)
        at com.devolab.recapitulatif.adapter.TabAbonneAdapter$1.onClick(TabAbonneAdapter.java:79)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24697)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

您收到以下錯誤:

java.lang.IllegalArgumentException:無效數據。 數據必須是 Map 或合適的 POJO object,但其類型為:java.lang.String

因為您正在嘗試將 String 值寫入文檔,這實際上是不可能的。 根據有關set() 方法參數的官方文檔:

要寫入文檔的數據(例如,Map 或包含所需文檔內容的 POJO)。

因此,您無法簡單地編寫一個字符串,因此會出現該錯誤。 要解決這個問題,請將 Map 傳遞給 set() 方法,其中包含屬性名稱作為鍵和該字符串的實際值作為值。 架構應如下所示:

Firestore-root
   |
   --- USERTABLE (collection)
         |
         --- uid (document)
              |
              --- AMISCOLLECTION (collection)
                     |
                     --- uid (document)
                          |
                          --- fieldName: "StringValue"

您還可以使用 POJO class 的 object,就像您在前兩個共享示例中所做的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM