【问题标题】:Android Realm - debugging [duplicate]Android Realm - 调试[重复]
【发布时间】:2017-08-02 18:38:28
【问题描述】:

我想查看 Realm 对象变量的值

例如:

Student (int studentID, ArrayList <Subject> subjectList)

Subject (int subjectID, String subjectName)

我想在使用 Android Studio 进行调试时查看学生对象中的科目名称。

我应该在 android studio 调试窗口的哪里查看学生的科目列表?

【问题讨论】:

  • 运行调试器会自动打开调试器窗口
  • 当然!打开调试器窗口后,我在哪里可以看到主题列表的值?这是特定于 Realm 的。
  • 你可以在你想查看值的地方放断点
  • 没有。当我在调试器窗口中展开学生对象的树视图时,领域对象显示主题列表 = 0。但在该学生对象的某处它存储主题列表。我想知道我应该在该学生对象中的哪个位置查找其主题列表

标签: android debugging realm


【解决方案1】:

Realm 代理您的模型对象,并且是一个零副本存储系统,因此为了检查字段的值,您需要使用调试器的 evaluate expression 功能。

我们正在考虑为调试器编写一个插件以直接显示值的可能性,但这仍处于调查阶段。

【讨论】:

  • 评估 realmResults.get(position).Name 的表达式给我 null 但它不是。怎么办?
  • 不适用于遇到 Realm.getDefaultInstance().where(MapCity.class).findAll();返回具有空字段值的实体列表(它们不是)
  • 还在调查阶段?
  • 我们都应该抛弃 Realm。这是我不得不处理的最糟糕的软件。由于某种原因,它每天都让我们失望。无法正确调试我们的应用程序并不是不方便,只是无法接受。
  • 我们现在遇到了这个问题,哈哈。这真的很痛苦。
【解决方案2】:

你不能直接那样做。

这是我的方法。

 List<FooObject> messages = realm.copyFromRealm(value);

您可以从消息中查看调试器值。

完整代码

realm.where(FooObject.class).equalTo(FooObject.id, id).findAllAsync().asObservable()
            .filter(new Func1<RealmResults<FooObject>, Boolean>() {
                @Override
                public Boolean call(RealmResults<FooObject> message) {
                    return message.isLoaded();
                }
            }).subscribe(new SimpleObserver<RealmResults<FooObject>>() {
                @Override
                public void onCompleted() {
                    super.onCompleted();
                }

                @Override
                public void onNext(RealmResults<FooObject> value) {
                    super.onNext(value);
                    List<FooObject> messages = realm.copyFromRealm(value);
                    RLog.d(TAG, "Messages");
                }

                @Override
                public void onError(Throwable e) {
                    super.onError(e);
                }

                @Override
                public String getTag() {
                    return TAG;
                }
            });

【讨论】:

    【解决方案3】:

    您可以使用来自 Facebook 的 Stheto。您将能够看到动态变化和所有表格等。这是链接:https://github.com/uPhyca/stetho-realm

    我将在这里解释: 从 gradle 导入 lib

    >  compile 'com.facebook.stetho:stetho:1.5.0'
    >  compile 'com.uphyca:stetho_realm:2.1.0'
    

    然后在一个类中扩展应用程序(不要忘记通知清单你的类:

     <application
            android:allowBackup="true"
            tools:ignore="AllowBackup"
            android:name=".YourClassName"
    

    然后添加这个

    public class YourClassName extends Application {
    ...
     @Override
        public void onCreate() {
         Stetho.initialize(
                        Stetho.newInitializerBuilder(this)
                                .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                                .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build())
                                .build());
    

    最后在这个网址上打开 chrome

    chrome://inspect/#devices 
    

    然后点击检查。继续 Ressources 然后在 Web Sql 上。您将能够像那样看到您的数据库

    【讨论】:

    • 成功了:android:allowBackup="true" tools:ignore="AllowBackup"
    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多