【问题标题】:Nested transactions are not allowed. Use commitTransaction() after each beginTransaction().不允许嵌套事务。在每个 beginTransaction() 之后使用 commitTransaction()。
【发布时间】:2015-10-22 03:01:24
【问题描述】:

这是我项目的代码,我使用 Realm 作为我的数据库。

我遇到了与我类似的问题,但无法解决,所以在这里发布。 这是我经历过的https://github.com/realm/realm-java/issues/542

@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);



        if (HttpError.checkStatusSuccessForResponse(statusCode, result))
        {
            Realm realm = Realm.getInstance(ApplicationController.getInstance());
            realm.beginTransaction();

        try {

            JSONObject jsonResult = new JSONObject(result);
            JSONArray jsonArray = jsonResult.getJSONArray("phone_numbers");

            for (int i = 0; i < jsonArray.length(); i++)
            {

                //                  List<R_LocalContactDB> localContactDb = Select
                //                          .from(R_LocalContactDB.class)
                //                          .where(Condition.prop("PHONE").eq(jsonArray.get(i)))
                //                          .list();

                RealmResults<R_LocalContactDB> localContact = realm.where(R_LocalContactDB.class).equalTo("phone",jsonArray.get(i).toString()).findAll();

                if (localContact.size() > 0)
                {

                    R_LocalContactDB localDb = localContact.get(0);
                    localDb.setStatus(1);
                    realm.copyToRealmOrUpdate(localDb);
                    realm.commitTransaction();

                }
            }

            localContactsSyncCallBack.didFinishProfileSync(true, null);

        } catch (JSONException e) {
            Log.d("Server Response ", "Exception " + result);
        }


    }
    else {

        Log.d("Server Response ",
                "Exception "
                        + HttpError
                                .parseErrorFromServer(statusCode, result));

    }

}

我不断收到嵌套错误!有人可以帮忙吗?

【问题讨论】:

  • super.onPostExecute(result); 中的预期是什么?我是否需要加倍......
  • 我只是重写了方法,但我想通过 Realm 查询获取本地联系人
  • 你应该使用executeTransaction()而不是realm.beginTransaction()realm.commitTransaction()

标签: android realm


【解决方案1】:

您正在循环/if 块内关闭事务。要么冒着永远不会关闭事务的风险,要么多次调用 commit。此外,如果抛出异常,您还可以保持事务打开。您可以在这里查看我们如何处理这种情况:https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java#L989-Lundefined

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2014-08-31
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多