如何使用 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 方法,但这可能会使对象的后续使用复杂化)
我正在尝试从我的 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 方法,但这可能会使对象的后续使用复杂化)