【问题标题】:Realm error: Your Realm is opened from a thread without a Looper and you provided a callback, we need a Handler to invoke your callback领域错误:您的领域是从没有 Looper 的线程打开的,并且您提供了回调,我们需要一个处理程序来调用您的回调
【发布时间】:2016-11-10 16:34:04
【问题描述】:

我在订阅者的方法onComplete()中制作了这段代码:

long size, perc;
    public void onCompleted()
    {
        Log.wtf("on complete","On complete");
        realm = Realm.getInstance(defaultConfig);
        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm mRealm) {
                AirportR airport = new AirportR();

                size = airp.size();
                Log.d("size:", String.valueOf(size));

                for (int i = 0; i < airp.size(); i++)
                {
                    airport.setId(Integer.parseInt(airp.get(i).getId()));

                    perc = i / size * 100;
                    Log.d("i + percentage", String.valueOf(i) + " - " + String.valueOf(perc));

                    mRealm.insertOrUpdate(airport);
                }
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess()
            {
            }
        }, new Realm.Transaction.OnError() {
            public void onError(Throwable error) {
                error.printStackTrace();
            }
        });
    }

当我使用调试器时,我看到以下错误消息:

java.lang.IllegalStateException: Your Realm is opened from a thread without a Looper and you provided a callback, we need a Handler to invoke your callback

我发现如果我不使用 Transaction.Success()Transaction.OnError() 效果很好,如果我使用它们,我只会遇到这个问题。

有办法解决吗?

谢谢

【问题讨论】:

    标签: android multithreading realm rx-java


    【解决方案1】:

    onCompleted() 似乎不在 UI 线程上运行。调度程序上的普通后台线程没有循环器,因此当异步事务完成时,Realm 无法通知它。

    您应该使用executeTransaction(),因为您已经在后台线程上,或者只从looper 线程(例如UI 线程)运行executeTransactionAsync()

    【讨论】:

    • 谢谢...我也找到了使用这个的解决方案:getActivity().runOnUiThread(new Runnable() { @Override public void run() { ... async here } }
    • 两者都有效。如果您确定它始终在后台线程上运行,则同步事务是有意义的。
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多