如何使用 ROOM 查询列表中返回的数据?

How to use data from returned in a List from a ROOM query?

我正在尝试从我的 ROOM 数据库中提取一些值以显示给用户 - 它们都来自一行,用户通过输入与设置为值的数字对应的数字来选择该行首要的关键。我知道到目前为止一切正常,因为我能够查询数据而不会抛出超出范围的错误(如果我输入无效数字,它就会抛出)。

这是我的 DAO:

'''

@Query("SELECT * FROM pitData")
List<PitData> getAllScores();




@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertAll(PitData pitData);


@Query("DELETE FROM PitData")
void nukeTable();

@Query("Select * FROM pitData WHERE teamNum = :idInt")
List<PitData> findTeam(int idInt);

'''

这里是 class 我试图从中获取 return (findTeam) 的地方:

'''

EditText teamnum;
Button search;
TextView shower;

String id;
int idInt;

private List<PitData> pit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pit_view);

    teamnum = findViewById(R.id.textView15);
    search = findViewById(R.id.button6);
    shower = findViewById(R.id.shower);

    search.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            id = teamnum.getText().toString();
            idInt = Integer.parseInt(id);
            Log.d("dataPull", "Ran searchData");
            searchData();

        }


    });

}

public void searchData(){

    ScoreDataBase SDB = ScoreDataBase.getDatabase(this);

    PitData pitData = new PitData("1", "two", "three");

    SDB.pitDao().insertAll(pitData);




    Log.d("PitView","Returned List");
    pit = SDB.pitDao().findTeam(idInt);

        //Log.d("pitdata", pit.getClass().getName());

        Log.d("pitviewdata", String.valueOf(pit.get(0))); // this is where I am trying to pull a specific column from the row that I queried into the list 'pit'

'''

但是,当我尝试从列表中获取数据时,它说列表中只有一项(项目 0)。当我获取该值并将其打印在日志 and/or 文本视图中时,它 return 是我的实体的 class 路径的字符串,带有@一些随机字符串 钉在最后。我如何才能将实体的值放入列表而不是实体的 class 路径?

 pit = null;
 for(PitData p: SDB.pitDao().findTeam(idInt) {
     pit = p;
     break; // Only expect/want the 1 PtData
 }
 if (pit != null) {
     Log.d("pitviewdata",pit.the_appropriate_member_variable_or_getter_method);
 } else {
     Log.d("pitviewdata","NOT FOUND");
 }

或者,如果您改为使用(如您所知,您只能检索 1 个 PitData):-

@Query("Select * FROM pitData WHERE teamNum = :idInt")
PitData findTeam(int idInt);

pit = SDB.pitDao().findTeam(idInt);
// Test here for no data extracted (depends upon the PitData class definition)
Log.d("pitviewdata",pit.the_appropriate_member_variable_or_getter_method);

也就是说,您需要获取适当的成员变量值,而不是使用默认的 toString 方法。

my Entity with @some random string

这是对象的 address/pointer,即默认的 toString 方法输出的内容(您可以替代地覆盖 toString 方法,但这可能会使对象的后续使用复杂化)