领域对象在android中失效

领域对象在android中失效,android,android-asynctask,realm,Android,Android Asynctask,Realm,嗯,我有一份我拥有的联系人模型列表。这个列表就是领域对象的列表。我从类似于 public static List<Contact> getAllTazligenContacts(Context context) { Realm realm = Realm.getInstance(context); return realm.where(Contact.class) .equalTo("isTazligenContact", true)

嗯,我有一份我拥有的联系人模型列表。这个列表就是领域对象的列表。我从类似于

    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时,列表看起来很好,但当我进入后台时,我的列表就失效了,即在每个索引上都显示Illegel状态异常或无效对象。
我做了一些搜索,发现可能是线程删除或使对象无效。所以我的问题是如何解决这个问题。如何防止我的领域列表失效??感谢

Realm,RealmResult和RealmObject不能跨线程传递,当您在AsyncTask中使用RealmObject时,您将它们移动到其他线程,这就是为什么您会得到无效的对象

您可以使用以下任一解决方案

将所有操作保持在同一线程上 在后台线程中获取RealmObjects 将RealmObjects复制到非领域模型类,并将其用于您的操作
Realm、RealmResult和RealmObject不能跨线程传递,当您在AsyncTask中使用RealmObject时,您将它们移动到其他线程,这就是为什么您会得到无效的对象

您可以使用以下任一解决方案

将所有操作保持在同一线程上 在后台线程中获取RealmObjects 将RealmObjects复制到非领域模型类,并将其用于您的操作