我有一个联系人(模型)列表。该列表是领域对象列表。我从领域得到那些对象,如
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时我的列表被无效,即在每个索引上它都显示“非法状态异常或无效对象”。 我做了一些搜索,发现可能是线程删除或使对象无效。所以我的问题是如何解决这个问题。如何防止我的领域列表失效?感谢
答案 0 :(得分:4)
Realm,RealmResult&amp; RealmObject不能跨线程传递,当您在AsyncTask中使用RealmObjects时,您将它们移动到其他线程,这就是您获得无效对象的原因。
您可以使用以下任何解决方案,