简体   繁体   中英

Issues after realm upgrade and retrofit

I'm facing an error/exception while calling Retrofit service call. This exception I'm receiving after the Realm and Retrofit version upgrade in my project, and currently I'm using current version of rxJava, realm and retrofit.

I'm using JacksonConverterFactory and created my own object mapper class.

Kindly help to solve the exception.

P.N :- HousingComplex is a model class and extends as realmObject
public class HousingComplex extends RealmObject {
    Boolean isAddressAllowed;
    Boolean isLocalityAllowed;
    Boolean isPetsAllowed;
    Boolean isCityAllowed;
    Boolean isNameAllowed;
    String metadata;


    public Boolean getAddressAllowed() {
        return isAddressAllowed;
    }

    public void setAddressAllowed(Boolean addressAllowed) {
        isAddressAllowed = addressAllowed;
    }

    public Boolean getLocalityAllowed() {
        return isLocalityAllowed;
    }

    public void setlocalityAllowed(Boolean localityAllowed) {
        isLocalityAllowed = localityAllowed;
    }

    public Boolean getPetsAllowed() {
        return isPetsAllowed;
    }

    public void setPetsAllowed(Boolean petsAllowed) {
        isPetsAllowed = petsAllowed;
    }

    public Boolean getCityAllowed() {
        return isCityAllowed;
    }

    public void setCityAllowed(Boolean cityAllowed) {
        isCityAllowed = cityAllowed;
    }

    public Boolean getNameAllowed() {
        return isNameAllowed;
    }

    public void setNameAllowed(Boolean nameAllowed) {
        isNameAllowed = nameAllowed;
    }

    public String getMetadata() {
        return metadata;
    }

    public void setMetadata(String metadata) {
        this.metadata = metadata;
    }
}

Exception

07-03 18:23:12.950 28342-28384/in.zenify.android.internal.debug W/System.err: java.lang.RuntimeException: Unable to convert in.temp.android.internal.mediaCollection.webservice.GroupObject@5230c4a to RequestBody
07-03 18:23:12.951 28342-28384/in.temp.android.internal.debug W/System.err: at retrofit2.ParameterHandler$Body.apply(ParameterHandler.java:358)
    at retrofit2.ServiceMethod.toRequest(ServiceMethod.java:111)
    at retrofit2.OkHttpCall.createRawCall(OkHttpCall.java:184)
07-03 18:23:12.952 28342-28384/in.temp.android.internal.debug W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:168)
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:91)
    at in.internal.android.internal.mediaCollection.MediaCollectionTask$5.upload(MediaCollectionTask.java:347)
    at in.internal.android.internal.mediaCollection.MediaCollectionTask$5.upload(MediaCollectionTask.java:308)
    at in.internal.android.internal.core.sync.ZenSyncAdapter.upSync(ZenSyncAdapter.java:154)
    at in.internal.android.internal.core.sync.ZenSyncAdapter.onPerformSync(ZenSyncAdapter.java:60)
    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:272)
07-03 18:23:12.954 28342-28384/in.internal.android.internal.debug W/System.err: Caused by: com.fasterxml.jackson.databind.JsonMappingException: HousingComplex doesn't have a primary key. (through reference chain: in.temp.android.internal.mediaCollection.webservice.GroupObject["mediaList"]->java.util.HashMap["MAIN_DOOR_1_UfffX6DZR-iljygYhvIzKA"]->java.util.ArrayList[0]->in.internal.android.internal.mediaCollection.webservice.MediaObject["mediaTagList"]->io.realm.RealmList[0]->io.realm.in_temp_android_internal_models_TagRealmProxy["realm"]->io.realm.Realm["schema"]->io.realm.ImmutableRealmSchema["all"]->java.util.LinkedHashSet[4]->io.realm.ImmutableRealmObjectSchema["primaryKey"])
07-03 18:23:12.963 28342-28384/in.temp.android.internal.debug W/System.err: at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:342)
07-03 18:23:12.964 28342-28384/in.temp.android.internal.debug W/System.err: at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:686)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
07-03 18:23:12.965 28342-28384/in.temp.android.internal.debug W/System.err: at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:616)
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:519)
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:31)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:253)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1425)
    at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:1129)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsBytes(ObjectWriter.java:1025)
    at retrofit2.converter.jackson.JacksonRequestBodyConverter.convert(JacksonRequestBodyConverter.java:34)
    at retrofit2.converter.jackson.JacksonRequestBodyConverter.convert(JacksonRequestBodyConverter.java:24)
    at retrofit2.ParameterHandler$Body.apply(ParameterHandler.java:356)
    ... 9 more
Caused by: java.lang.IllegalStateException: HousingComplex doesn't have a primary key.
07-03 18:23:12.967 28342-28384/in.temp.android.internal.debug W/System.err: at io.realm.RealmObjectSchema.getPrimaryKey(RealmObjectSchema.java:377)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:633)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    ... 44 more

The error is so clear.

Caused by: java.lang.IllegalStateException: HousingComplex doesn't have a primary key.

So you need to add a primary key to your model class. For example

 @PrimaryKey 
 private int id;

I think you should switch this time to using

@RealmClass
public class HousingComplex implements RealmModel {
}

And you should only give detached objects to your jackson serializer:

List<HousingComplex> detached = realm.copyFromRealm(housingComplexes);
apiService.send(detached);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM