2016-07-30 5 views
0

レトロフィットエンキューメソッドを呼び出してレルムにデータを追加している間、My ProgressDialogが停止します。唯一の問題は、progressdialogサイクルが停止し、エラーがないことです。ここに私のコードです。私はハンドラを使用していますがレトロフィットでデータを取得中にデータを取得中にデータベースを追加するときにProgressDialogを表示

private void DownloadQuestions(final String chapterId){ 

    final Call<Questions> questionCall = MainApi.createService(MainService.class). 
      getQuestionsByChapterId(chapterId); 
    Log.d("Package_Name", getApplicationContext().getPackageName()); 
    pDialog = new SweetAlertDialog(this, SweetAlertDialog.PROGRESS_TYPE); 
    pDialog.getProgressHelper().setBarColor(Color.parseColor("#272E3E")); 
    pDialog.setTitleText("Downloading"); 
    pDialog.show(); 

    questionCall.enqueue(new Callback<Questions>() { 
     @Override 
     public void onResponse(Call<Questions> call, Response<Questions> response) { 
      questions.addAll(response.body().getQuestions()); 
      for (Question ques : questions) { 
       realm.beginTransaction(); 

       QuestionRealm questionRealm = realm.createObject(QuestionRealm.class); 
       questionRealm.setChapter_id(ques.getChapter_id()); 
       questionRealm.setQuestion_type_id(ques.getQuestion_type_id()); 
       questionRealm.setQuestion(ques.getQuestion()); 
       questionRealm.setHint1(ques.getHint1()); 
       questionRealm.setHint2(ques.getHint2()); 
       questionRealm.setHint3(ques.getHint3()); 
       questionRealm.setHint4(ques.getHint4()); 
       questionRealm.setAnswer(ques.getAnswer()); 
       questionRealm.setYear(ques.getYear()); 
       realm.commitTransaction(); 
      } 
      pDialog.dismissWithAnimation(); 
      Toast.makeText(getApplicationContext(), " Questions downloaded", Toast.LENGTH_SHORT).show(); 
      quesDownload.setVisibility(View.GONE); 
      chapCheckBox.setVisibility(View.VISIBLE); 

     } 

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

     } 
    }); 

} 

質問の数が400を超えている、それは、ProgressDialogはまだサイクリングを停止し、すべてのデータがレルムに追加されたときに閉じています。私は何を解決する必要がありますか?前もって感謝します。

答えて

0

レルムコールでUIスレッドをブロックしています。 onResponseメソッド内のコードを新しいスレッドに移動する必要があります。

最も簡単なソリューションRealm.getDefaultInstance()。executeTransactionAsync(/ * realm insertings here!* /);

ベストソリューション:RxJava!

関連する問題