[英]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.