2016-07-04 13 views
0

私は持っている連絡先(モデル)のリストを持っています。そのリストは領域オブジェクトのリストです。そして、私は今の問題は、私はasynctaskを呼び出すと私のような、そのクラスでこのリストを使用していますということですレルムオブジェクトがアンドロイドで無効になっています

public static List<Contact> getAllTazligenContacts(Context context) { 
    Realm realm = Realm.getInstance(context); 
    return realm.where(Contact.class) 
      .equalTo("isTazligenContact", true) 
      .findAll(); 
    } 

のような領域から、それらのオブジェクトを取得します。それは

public class AsyncCallContacts extends AsyncTask<String, Void, List<Contact>> { 

private ProgressDialog dialog = new ProgressDialog(mContext); 
@Override 
protected void onPreExecute() { 
    dialog = ProgressDialog.show(mContext, null, getString(R.string.getting_contacts)); 
    super.onPreExecute(); 
} 

@Override 
protected List<Contact> doInBackground(String... params) { 
    //Some task (realm objectList is used) 
} 

@Override 
protected void onPostExecute(List<Contact> result) { 
    super.onPostExecute(result); 
    dialog.setMessage(getString(R.string.finishing_up));  
} 
} 

問題は、私はアプリをデバッグし、私はonPreExecuteが、私は入った瞬間にいるときに、リストは罰金だということですので、私のasynctaskに問題が私のrealmObjectsとあったことを見つけるために私に時間を要したonBackground私のリストは無効になっています。つまり、「Illegelの状態の例外または無効なオブジェクト」と呼ばれるすべてのインデックスにあります。 私はいくつかの検索を行い、スレッドがオブジェクトを削除または無効にする可能性があることを発見しました。だから私の質問は私がこれを解決する方法です。私の領域リストが無効にならないようにするにはどうすればよいですか?ありがとう

答えて

3

レルム、RealmResult & RealmObjectをスレッド間で渡すことはできません.RealmObjectsをAsyncTaskで使用すると、そのオブジェクトを他のスレッドに移動します。

あなたは次のソリューションのいずれかを使用することができ、

  • 同じスレッド
  • 上のすべての操作が非レルムモデルクラスにバックグラウンドスレッドでRealmObjects
  • コピーRealmObjectsを取得し、それを使用してくださいあなたの操作
関連する問題