此方法仅在托管模式下可用 [英] This method is only available in managed mode

查看:77
本文介绍了此方法仅在托管模式下可用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发集成了Realm的Android应用,尝试查询查询时遇到问题.我尝试通过"id"将产品搜索到通过参数传递的产品列表中.这种方法效果很好,但突然我得到了下一个例外:

I'm develop an Android app with Realm integrated and I have a problem when I try to search with a query. I try to search a product by its "id" into product list passed by parameter. This method worked perfect but suddenly I got the next exception:

Process: com.singularfactory.ecommerceapp.ecommerceapp, PID: 9372
    io.realm.exceptions.RealmException: This method is only available in managed mode
            at io.realm.RealmList.where(RealmList.java:260)
            at com.singularfactory.ecommerceapp.utility.UtilityDB.findProductIntoChildrenByEntityId(UtilityDB.java:176)
            at com.singularfactory.ecommerceapp.fragment.ProductDetailFragment.setProductRealmToView(ProductDetailFragment.java:378)
            at com.singularfactory.ecommerceapp.fragment.ProductDetailFragment.initializeEnvironment(ProductDetailFragment.java:119)
            at com.singularfactory.ecommerceapp.fragment.ProductDetailFragment.onActivityCreated(ProductDetailFragment.java:96)
            at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1797)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
            at com.singularfactory.ecommerceapp.fragment.ListsFragment.openProductDetailFragment(ListsFragment.java:256)
            at com.singularfactory.ecommerceapp.fragment.ListsFragment$5.onClick(ListsFragment.java:193)
            at com.singularfactory.ecommerceapp.adapter.ListsContentAdapter.onClick(ListsContentAdapter.java:78)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

我的代码:

/**
     * Find a product into Children by entityId
     * @param products
     * @param entityId
     * @return
     */
    public static ProductRealm findProductIntoChildrenByEntityId(RealmList<ProductRealm> products, String entityId) {
        ProductRealm product = null;

        if(products != null) {
            **product = products.where()**  //The problem is here
                    .equalTo("entityId", entityId)
                    .findFirst();
        }

        return product;
    }

我的模型:

 @RealmClass
public class ProductRealm extends RealmObject implements Serializable {

    private String  catId;                      //Only one category per product. In generic case many category per product
    private String  entityId;
    private String  parentId;
    private String  typeId;                     //"simple" | "configurable"
    private String  sku;
    private String  canaryProduct;
    private String  premium;
    private String  brand;
    private String  dinitosQty;
    private String  name;
    private String  ean;
    private String  description;
    private String  shortDescription;
    private String  weight;
    private String  isSaleable;
    private String  imageUrl;
    private String  unit;
    private String  unitFresh;
    private String  childrenSelected;
    private String  manageStock;
    private float   price;
    private float   minWeight;
    private float   quantityWeight;
    private int     quantity;
    private int     stock;
    private int     typeOfAttribute;            //0: Per units | 1: Per weight | 2: Both
    private int     typeOfChildrenSelected;     //0: Per units | 2: Per weight | -1: Undefined
    private boolean isIntoShoppingCart;         //Flag to indicate if the product is into the Shopping Cart
    private RealmList<AttributeRealm> attributeItems;
    private RealmList<ProductRealm>   children;
    ...
    /* Getters & Setters */

我希望这个问题很详细.

I hope that the question is well detailed.

先谢谢您了:)

推荐答案

之所以会发生这种情况,是因为您提供给findProductIntoChildrenByEntityId方法的RealmList是独立的,也就是说,不受Realm管理.独立的RealmList仅存在于内存中(而不是在Realm中),这意味着无法在其上进行查询.

This is happening because the RealmList you are providing to the findProductIntoChildrenByEntityId method is a standalone one, meaning, not managed by Realm. A standalone RealmList only lives in memory (and not in Realm), which means that it's not possible to query on it.

这篇关于此方法仅在托管模式下可用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆