У меня есть объект Race
, который имеет свойство randomArticlesPair
. Это свойство инициализируется как null
. Вот как document
объекта выглядит в базе данных:
Я бы хотел set
свойство randomArticlesPair
позже и поставить custom object
вместо этого, и вот как я это делаю:
CollectionReference usersRef= FirebaseFirestore.getInstance().collection(FirebaseConstants.USERS);
DocumentReference senderRef=usersRef.document(raceRoom.getSenderEmail()).collection(FirebaseConstants.RACES_FEED).document(raceRoomID);
Map<String,Object> randomArticlesPair=new HashMap<>();
randomArticlesPair.put(FirebaseConstants.RANDOM_ARTICLES_PAIR,raceRoom.getRandomArticlesPair());
senderRef.set(randomArticlesPair,SetOptions.merge());
Это объект RandomArticlePair
, который я пытаюсь вставить:
public class RandomArticlesPair {
private RandomArticle randomArticleA;
private RandomArticle randomArticleB;
public RandomArticlesPair(){}
public RandomArticlesPair(RandomArticle randomArticleA, RandomArticle randomArticleB) {
this.randomArticleA = randomArticleA;
this.randomArticleB = randomArticleB;
}
public RandomArticle getRandomArticleA() {
return randomArticleA;
}
public RandomArticle getRandomArticleB() {
return randomArticleB;
}
}
Его свойства - два RandomArticle
объекта:
@IgnoreExtraProperties
public class RandomArticle {
private String title, firstParagraph, id, url;
@Exclude private List<Linkshere>backTemplates_List;
@Exclude private List<Backlink>backlinks_List;
public RandomArticle(){}
public RandomArticle(String title, String firstParagraph, String id, String fullUrl){
this.title=title;
this.firstParagraph=firstParagraph;
this.id=id;
this.url=fullUrl;
}
public RandomArticle(String title, String fullUrl){
this.title=title;
this.url=fullUrl;
}
public RandomArticle(String title, String firstParagraph, String id, String fullUrl, List<Linkshere>backTemplates_List){
this.title=title;
this.firstParagraph=firstParagraph;
this.id=id;
this.url=fullUrl;
this.backTemplates_List=backTemplates_List;
}
public String getTitle(){
return this.title;
}
public String getFirstParagraph(){
return this.firstParagraph;
}
public String getId(){
return this.id;
}
public String getURL(){
return this.url;
}
@Exclude public List<Linkshere> getBacktemplatesList(){
return this.backTemplates_List;
}
@Exclude public void setBacklinks_List(List<Backlink> backlinks_List) {
this.backlinks_List = backlinks_List;
}
@Exclude public List<Backlink> getBacklinksList(){
return this.backlinks_List;
}
}
Моя проблема в том, что после попытки добавить новые данные я получаю эту ошибку:
05-06 22:59:17.313 2991-2991/com... E/AndroidRuntime: FATAL EXCEPTION: main
Process: com..., PID: 2991
java.lang.IllegalArgumentException: Invalid data. Unsupported type: com....infrastructure.objects.random_article.RandomArticlesPair (found in field randomArticlesPair)
at com.google.firebase.firestore.UserDataConverter$zza.zzb(SourceFile:232)
at com.google.firebase.firestore.UserDataConverter.zzb(SourceFile:578)
at com.google.firebase.firestore.UserDataConverter.zza(SourceFile:452)
at com.google.firebase.firestore.UserDataConverter.zza(SourceFile:479)
at com.google.firebase.firestore.UserDataConverter.zza(SourceFile:445)
at com.google.firebase.firestore.UserDataConverter.parseMergeData(SourceFile:275)
at com.google.firebase.firestore.DocumentReference.set(SourceFile:149)
at com....multiplayer.races.RaceActivity_Sender$6.onDataChange(RaceActivity_Sender.java:199)
at com.google.firebase.database.zzp.onDataChange(Unknown Source:7)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source:13)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Вставка строки работает просто отлично:
randomArticlesPair.put(FirebaseConstants.RANDOM_ARTICLES_PAIR,"plain old string");
Как я могу это исправить?