【问题标题】:How to override `toString()` properly to get rid of hash code如何正确覆盖`toString()`以摆脱哈希码
【发布时间】:2018-12-29 23:16:33
【问题描述】:

我正在从Room 检索测试数据,但我得到的只是哈希码数据,即使我在@Entity 类中覆盖了toString() 方法。我怎么知道是否使用了覆盖方法?

我已经使用Live-data 正确设置了RoomdatabaserepositoryviewModelview。从 onCreate 我有一个正确触发的observer,并显示了数据。正如预期的那样,它是has-code 数据。通常我通过在@Entity 类中覆盖toString() 并将其转换为string 数据,然后在onCreate() 中使用它,但它不起作用。它仍然给我hash 数据。

在我的@Entity 类中,我像这样覆盖toString()

@Override
public String toString() {
    return "MyEntity{" +
            "id=" + id +
            ", title='" + title + '\'' +
            ", description='" + description + '\'' +
            ", priority=" + priority +
            '}';
}

在我的onCreate() 中,我调用Interface 使用:

myViewModel.getAllData().observe( this, new Observer<List<MyEntity>>() {
        @Override
        public void onChanged(@Nullable List<MyEntity> myEntities) {

            Log.d("TAG: ", "DATA CHANGED! " + myViewModel.getAllData().toString());
        }
} );

但尽管使用了.toString(),我仍然只是得到哈希数据:

D/TAG:: DATA CHANGED! android.arch.lifecycle.ComputableLiveData$1@a12e85e

我期待一些基本的测试数据:

"MY FIRST OBJECT", "THIS IS MY OBJECT", 1 

【问题讨论】:

  • toString 方法在哪个类中?是ComputableLiveData的第一个内部类吗?
  • 你在 List 实例上调用 toString
  • @wardziniak 没关系。很明显,无论List 的实现是什么,它都使用toString 来遍历元素,并在每个元素上调用toString
  • @Dawood 在我的 Entity 类中,可以找到 Room 的注释变量。我已经将它放在以前的项目中,并且效果很好。 ComputableLiveData 不是我创建的类。老实说,我不知道那是什么...如果我应该提供更多代码,请告诉我。
  • @wardziniak,@Dawood,是的,在列表中使用 toString() 应该不会造成问题。

标签: java android tostring android-room


【解决方案1】:

您在ComputableLiveData 上致电toString(), 您必须在 myEntities 上调用 toString(),这将反过来在 MyEntity 的各个元素上调用 toString()

myViewModel.getAllData().observe( this, new Observer<List<MyEntity>>() {
    @Override
    public void onChanged(@Nullable List<MyEntity> myEntities) {
        Log.d("TAG: ", "DATA CHANGED! " + myEntities.toString());
    }
});

【讨论】:

  • 啊,我明白了!我实际上无法访问来自Live-data 的数据。现在我看onChanged 方法中的参数似乎很明显:@Nullable List&lt;MyEntity&gt; myEntities。当然这是我应该使用的!非常感谢您清理@Willi。感谢您抽出宝贵的时间! :)
猜你喜欢
  • 2014-02-17
  • 2019-03-21
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多