I have a Race object which has a randomArticlesPair property. This property is initialised to be null . This is how this object's document looks like in the database:
I'd like to set the randomArticlesPair property later and put a custom object instead, and this is how I do it:
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());
This is the RandomArticlePair object that I'm trying to insert:
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;
}
}
Its properties are two RandomArticle objects:
@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;
}
}
My problem is that after trying to add the new data, I'm getting this error:
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)
Inserting a string works just fine:
randomArticlesPair.put(FirebaseConstants.RANDOM_ARTICLES_PAIR,"plain old string");
How can I fix this?

