如何正确重写`toString()`以摆脱哈希码

时间:2018-12-29 23:16:33

标签: java android tostring android-room

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

我已经使用Room分别为databaserepositoryviewModelview设置了Live-data。从onCreate中,我有一个observer可以正确触发,并显示数据。如预期的那样,是has-code数据。通常,我通过覆盖string类中的toString()并在@Entity中使用它来将其转换为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 

1 个答案:

答案 0 :(得分:0)

您正在toString()上呼叫ComputableLiveData, 您必须在toString()上调用myEntities,然后依次在toString()的各个元素上调用MyEntity

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