android - Realm 对象在 android 中失效

标签 android android-asynctask realm

我有一个联系人(模型)列表。该列表是 Realm 对象列表。我从 Realm 中获取这些对象,例如

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

现在的问题是我正在调用一个异步任务,并且我正在该类中使用这个列表。我花了一个小时才发现问题出在我的 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 状态异常或无效对象”。 我做了一些搜索,发现线程可能删除或使对象无效。所以我的问题是我该如何解决这个问题。如何防止我的 Realm 列表失效?谢谢

最佳答案

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

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

  • 将所有操作保留在同一线程上
  • 在后台线程中获取 RealmObjects
  • 将 RealmObject 复制到非 Realm 模型类并将其用于您的操作

关于android - Realm 对象在 android 中失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191184/

相关文章:

java - 为什么下载管理器完成后广播接收器不调用?

ios - 添加静态Realm.framework但编译时出现错误: framework not found Realm clang: error: linker command failed with exit code 1

java.net.ProtocolException : unexpected end of stream happened when i uploaded a image to server by okhttp

java - 在 AsyncTask 中安全地调用 getActivity()

java - 我的 php 代码连接到 android 数据库

java - 为什么我无法在 AsyncTask 中为另一个类的 ListView 设置适配器?

android - 如何为 Realm android中的每个插入和更新行设置当前时间戳

ios - Xcode 8.2.1 & Swift 3.0.2 + Realm 2.4.x = 致命异常崩溃

android - 如何在单元测试中初始化 ThreeTen Android backport

android - 带有箭头的 Horizo​​ntalScrollView