领域对象在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复制到非领域模型类,并将其用于您的操作