如何正确覆盖 `toString()` 以摆脱哈希码

How to override `toString()` properly to get rid of hash code

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

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

在我的 @Entity class 中,我像这样覆盖 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@a12e85e

我希望得到一些基本的测试数据:

"MY FIRST OBJECT", "THIS IS MY OBJECT", 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());
    }
});