2017-08-23 3 views
0

Je suis nouveau pour l'intégration de domaine. J'essaie de sauvegarder ma réponse json retrofit dans la base de données Realm. Mais je suis encore confus comment compléter cette tâche pour la mise à niveau 2.Stockez des données dans Realm grâce à Retrofit 2

Je reçois la réponse json et étend la classe RealmObject selon les documents RealM. mais toujours pas de bonne façon de stocker ma réponse directement dans le domaine.

Tableau de bord d'activité:

apiInterface = APIClient.getClient().create(APIInterface.class); 
     final Call<RealmList<ExampleTest>> call = apiInterface.getSurvay(); 
    call.enqueue(new Callback<RealmList<ExampleTest>>() { 
     @Override 
     public void onResponse(Call<RealmList<ExampleTest>> call, Response<RealmList<ExampleTest>> response) { 

    resource = response.body(); 

Log.d(" response "," success "); 

      } 

API client:

{ 
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 


retrofit = new Retrofit.Builder() 
     .baseUrl("** my URL **") 
     .addConverterFactory(GsonConverterFactory.create()) 
     .client(client) 
     .build(); 


return retrofit; 
} 

build.gradle:

compile ('com.squareup.retrofit2:retrofit:2.1.0') { 
     exclude module: 'okhttp' 
    } 
    compile 'com.google.code.gson:gson:2.6.2' 
    compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' 
    compile 'com.squareup.okhttp3:okhttp:3.4.1' 

classe POJO:

ExampleTest:

public class ExampleTest extends RealmObject { 

     @SerializedName("Id") 
     @Expose 
     private Integer id; 
     @SerializedName("name") 
     @Expose 
     private String surveyName; 
     @SerializedName("Language_id") 
     @Expose 
     private Integer languageId; 
     @SerializedName("image") 
     @Expose 
     private String surveyImage; 
     @SerializedName("description") 
     @Expose 
     private String surveyDescription; 
     @SerializedName("ListQuestion") 
     @Expose 
     private RealmList<ListQuestion> listQuestion = null; 

     public Integer getId() { 
      return id; 
     } 

     public void setId(Integer id) { 
      this.id = id; 
     } 

     public String getSurveyName() { 
      return surveyName; 
     } 

     public void setSurveyName(String surveyName) { 
      this.surveyName = surveyName; 
     } 

     public Integer getLanguageId() { 
      return languageId; 
     } 

     public void setLanguageId(Integer languageId) { 
      this.languageId = languageId; 
     } 

     public String getSurveyImage() { 
      return surveyImage; 
     } 

     public void setSurveyImage(String surveyImage) { 
      this.surveyImage = surveyImage; 
     } 

     public String getSurveyDescription() { 
      return surveyDescription; 
     } 

     public void setSurveyDescription(String surveyDescription) { 
      this.surveyDescription = surveyDescription; 
     } 

     public RealmList<ListQuestion> getListQuestion() { 
      return listQuestion; 
     } 

     public void setListQuestion(RealmList<ListQuestion> listQuestion) { 
      this.listQuestion = listQuestion; 
     } 

    } 

ListQuestion:

public class ListQuestion extends RealmObject { 

    @SerializedName("Id") 
    @Expose 
    private Integer id; 
    @SerializedName("Question_text") 
    @Expose 
    private String questionText; 
    @SerializedName("Answer_type_id") 
    @Expose 
    private Integer answerTypeId; 
    @SerializedName("Answer_type") 
    @Expose 
    private String answerType; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getQuestionText() { 
     return questionText; 
    } 

    public void setQuestionText(String questionText) { 
     this.questionText = questionText; 
    } 

    public Integer getAnswerTypeId() { 
     return answerTypeId; 
    } 

    public void setAnswerTypeId(Integer answerTypeId) { 
     this.answerTypeId = answerTypeId; 
    } 

    public String getAnswerType() { 
     return answerType; 
    } 

    public void setAnswerType(String answerType) { 
     this.answerType = answerType; 
    } 

Realm:

private void initRealm() { 
     Realm.init(this); 
     RealmConfiguration config = new RealmConfiguration.Builder() 
       .name("books.realm") 
       .schemaVersion(1) 
       .deleteRealmIfMigrationNeeded() 
       .build(); 
     Realm.setDefaultConfiguration(config); 


    } 

S'il vous plaît aidez-moi comment puis-je stocker ma réponse json dans le royaume grâce à la rénovation 2.

+0

Vous pouvez voir un exemple dans notre documentation ici: https://realm.io/docs/java/latest/#retrofit –

+0

@ChristianMelchior J'ai vérifié votre lien, mais encore ne pas avoir de succès. – AppleDroid

+0

@ChristianMelchior Veuillez vérifier le code ci-dessus, est-ce que je me suis trompé? Comment puis-je stocker ma réponse dans le domaine? S'il vous plaît envoyez-moi un lien que vous avez. Merci beaucoup pour votre réponse. – AppleDroid

Répondre

2

J'ai eu ma réponse du site officiel de Realm et d'autres blogs.

Mon code ci-dessus fonctionne parfaitement. Juste besoin d'ajouter la fonctionnalité Realm correctement.

En activité: Tableau de bord

call.enqueue(new Callback<RealmList<ExampleTest>>() { 
      @Override 
      public void onResponse(Call<RealmList<ExampleTest>> call, Response<RealmList<ExampleTest>> response) { 

       resource = response.body(); 


       Realm.init(DashboardActivity.this); 
       config = new RealmConfiguration.Builder() 
         .name("books.realm") 
         .schemaVersion(1) 
         .deleteRealmIfMigrationNeeded() 
         .build(); 
       Realm.setDefaultConfiguration(config); 


       // add response to realm database 
       Realm realm = Realm.getInstance(config); 
       realm.beginTransaction(); 
       realm.copyToRealmOrUpdate(resource); 
       realm.commitTransaction(); 
       realm.close(); 


// programmatically check : data is inserted in to realm or not 

       int notesCount = realm.where(ExampleTest.class).findAll().size(); 
       int notesCount2 = realm.where(ListConditionalQuestion.class).findAll().size(); 
       int notesCount3 = realm.where(LstHotSpot.class).findAll().size(); 

       Log.d("my first",String.valueOf(notesCount)); 
       Log.d("my second",String.valueOf(notesCount2)); 
       Log.d("my 33333",String.valueOf(notesCount3)); 


      } 


      @Override 
      public void onFailure(Call<RealmList<ExampleTest>> call, Throwable t) { 

    Log.d("fail","response fail"); 

      } 
     });