2016-07-04 96 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非域模型类,并用它来您的操作