2016-07-04 151 views
0

以及我有一個聯繫人(模型),我有一個列表。那個列表是領域對象列表。和我的那些對象從境界像領域對象變得失效在android

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

現在的問題是,我打電話的的AsyncTask,我在該類喜歡使用這個列表。我花了一個小時才找到,這個問題與我realmObjects因爲在我的AsyncTask

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但我進入那一刻onBackground我的列表會失效,即在每個索引中都會顯示「Illegel狀態異常或無效對象」。 我做了一些搜索,發現線程可能會刪除或使對象無效。所以我的問題是我如何解決這個問題。我如何防止我的領域列表失效?謝謝

回答

3

Realm,RealmResult & RealmObject不能通過線程傳遞,當您在AsyncTask中使用RealmObjects時,您將它們移動到其他線程,這就是爲什麼您獲得了無效對象。

您可以使用以下任何解決方案,

  • 保持相同的線程
  • 上所有的操作獲取在後臺線程RealmObjects
  • 複製RealmObjects非域模型類,並用它來您的操作