2016-11-23 5 views
0

多くのIllegalStateExceptionsが発生しています。 RealmAdapterからRealmオブジェクトを削除するときに発生します。 RealmAdapterについては、 'io.realm:android-adapters:1.3.0'のバージョンを使用しています。RealmRecyclerViewAdapterからRealmオブジェクトを削除します。

これは私が私のアダプタで長押しで私のオブジェクトを削除する方法を示します。

//Delete message object 
    new MaterialDialog.Builder(holder.cardView.getContext()).title("Delete") 
      .content("Delete message?") 
      .positiveText("YES") 
      .negativeText("Cancel") 
      .onPositive(new MaterialDialog.SingleButtonCallback() { 
       @Override 
       public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 

        //Call delete 
        ApiManager.ApiManagerService apiManagerService = ApiManager.createService(ApiManager.ApiManagerService.class); 
        apiManagerService.deleteMessage(message.getId()).enqueue(new Callback<Void>() { 
         @Override 
         public void onResponse(Call<Void> call, Response<Void> response) { 
          Logger.d("delete message onResponse callback"); 

          //Delete from realm 
          Realm realm = Realm.getDefaultInstance(); 
          realm.beginTransaction(); 
          try { 
           message.deleteFromRealm(); 
          } catch(Exception e) { 
           e.printStackTrace(); 
          } 
          realm.commitTransaction(); 

          //Notify adapter 
          notifyDataSetChanged(); 
         } 

         @Override 
         public void onFailure(Call<Void> call, Throwable t) { 
          Logger.d("delete message onFailure callback"); 
         } 
        }); 
       } 
      }) 
      .show(); 

    return false; 
} 

は、アダプタ内部からオブジェクトを削除処理するための正しい方法は何ですか?

答えて

2

この

    @Override 
        public void onResponse(Call<Void> call, Response<Void> response) { 
         Logger.d("delete message onResponse callback"); 

         //Delete from realm 
         Realm realm = Realm.getDefaultInstance(); 
         realm.beginTransaction(); 
         try { 
          message.deleteFromRealm(); 
         } catch(Exception e) { 
          e.printStackTrace(); 
         } 
         realm.commitTransaction(); 

         //Notify adapter 
         notifyDataSetChanged(); 
        } 

でなければなりません

    @Override 
        public void onResponse(Call<Void> call, Response<Void> response) { 
         Logger.d("delete message onResponse callback"); 

         //Delete from realm 
         final long messageId = message.getId(); 
         Realm realm = Realm.getDefaultInstance(); // TODO: use Realm bound to lifecycle 
         realm.executeTransactionAsync(new Realm.Transaction() { 
          @Override 
          public void execute(Realm realm) { 
           realm.where(Message.class).equalTo("messageId", messageId).findAll().deleteAllFromRealm(); 
          } 
         }); 
         realm.close(); 

         //Notify adapter 
         ////notifyDataSetChanged(); 
        } 
関連する問題