2016-03-24 9 views
0

Für verschachtelte JSON-Objekte Kombination wieRetrofit 2 mit Greendao Einheiten

{"members": [ 
    { 
     "id":366, 
     "code":"T1234", 
     "defaultAddress": { 
      "addressLine1": "A2 Rityayan co-operative Housing Society" 
      "addressLine2": "P-34 Moti jheel avenue Dumdum" 
     } 
    } 
]} 

ich die folgenden Einheiten in Greendao gemacht haben,

private static void addMember(Schema schema) { 
    Entity member = schema.addEntity("CareMember"); 

    Property memberId = member.addLongProperty("id").primaryKey().getProperty(); 
    member.addStringProperty("code").unique(); 

    Entity defaultAddress = schema.addEntity("DefaultAddress"); 
    defaultAddress.addIdProperty(); 
    defaultAddress.addStringProperty("addressLine1"); 
    defaultAddress.addStringProperty("addressLine2"); 
    member.addToOne(defaultAddress, memberId); 
    defaultAddress.implementsSerializable();  
} 

Ich möchte eine 0.59 Beziehung zu schaffen und die Modelle speichern in Datenbank Obwohl das Element gespeichert ist, ist es schwierig, die Standardadresse zu speichern und wiederherzustellen. Ich habe eine Umgehungslösung entwickelt, hoffe aber, dass es einen richtigen Weg dafür gibt. Jede mögliche Hilfe würde geschätzt werden

Antwort

0

Ich fand einen Weg, indem ich Jackson anstelle von Gson in der Nachrüstung verwendete. Dazu , fügen Sie folgend in gradle

compile 'com.squareup.retrofit2:converter-jackson:2.0.0' 
compile 'org.codehaus.jackson:jackson-core-asl:1.1.0' 

Dann im übrigen Dienstklasse,

public class RestService{ 
RestInterface restInterface; 
public RestService(Context context) { 
     this.context = context; 
     OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); 


     okHttpClient = clientBuilder.build(); 

     ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     restServiceInterface = new Retrofit.Builder() //restServiceInterface //is the the rest service Interface variable 
       .baseUrl(RestInterface.BASE_URL) 
       .client(okHttpClient) 
       .addConverterFactory(JacksonConverterFactory.create(objectMapper)) 

       .build() 
       .create(RestServiceInterface.class); 
    } 

} 

Da jackson Setter-Methoden verwendet, daher die Setter-Methode von defaultAddress in CareMember Klasse ändern

// KEEP METHODS - put your custom methods here 
    @JsonSetter(value = "defaultAddress") 
    public void setDefaultAddressFromRetrofit(DefaultAddress defaultAddress) { 
     if (defaultAddress == null) { 
      throw new DaoException("To-one property 'defaultAddressId' has not-null constraint; cannot set to-one to null"); 
      defaultAddress = new DefaultAddress(); 
     } 

     synchronized (this) { 
      this.defaultAddress = defaultAddress; 
      defaultAddress.setId(id); 
      defaultAddress__resolvedKey = id; 
     } 

    } 
// KEEP METHODS END 

Schließlich in Ihrer benutzerdefinierten Sql-Helper-Klasse (von wo Sie speichern oder abrufen)

+0

Können Sie mir bitte sagen, wie dies mit greendao 3.0.1 – neena

+0

Tut mir leid, ich bin fertig mit GreenDao und verwendet DbFlow. Aber wenn ich es sehe, werde ich es hier posten. – Debanjan