我有两项活动。通过intent将数据从一个活动发送到另一个活动。然后我从数据库调用一个函数来显示该行的所有记录。
在这里 feeder_no
及 date
是复合主键。我没有任何记录的空值,但索引2处有一个错误空值。
这是数据库中的函数定义:
//show feeder details date wise
public Cursor showFeederDateWiseDetails(int feeder_no, String date) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("Select * from " + TABLE_FEEDER_DETAILS + " where feeder_no = ? and date = ?", new String[]{String.valueOf(feeder_no), date});
while (cursor.moveToFirst()){
if(cursor.getCount()>0)
return cursor;
}
return null;
}
函数调用
Intent intent = getIntent();
try {
feeder_no = Integer.parseInt(intent.getStringExtra("feeder_no"));
}catch (NumberFormatException e){
Toast.makeText(getApplicationContext(), "....", Toast.LENGTH_SHORT).show();
}
String date = intent.getStringExtra("date");
Cursor answer = myDB.showFeederDateWiseDetails(feeder_no, date);
while (answer.moveToNext()) {
t1.setText(answer.getString(1));
t2.setText(answer.getString(2));
t3.setText(answer.getString(3));
}
这就是我如何从一个活动中获得日期和馈线no的价值
private void openFeederDetailsPage() {
Intent intent = new Intent(this, FeederDetailsDateWise.class);
intent.putExtra("feeder_no", getFeederNo);
intent.putExtra("date", getDate);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
1条答案
按热度按时间r1zk6ea11#
您的代码存在一些问题。
自从
feeder_no
及date
如果是复合主键,那么您应该期望查询最多返回1行,因此在获得光标后不需要循环。一个简单的电话
cursor.moveToFirst()
足够检查光标是否返回一行。然后,当您通过调用
showFeederDateWiseDetails()
你必须检查它是否正确null
.如果不是,则获得列值(无需调用
moveToFirst()
同样,以前已经完成了)。最后,不是直接通过它们的索引(在返回许多列的查询中这是不安全的)获取列值,而是通过
getColumnIndex()
使用他们的名字。您应该知道,在中使用的索引1
t1.setText(answer.getString(1));
返回第二列的值,因为索引为0
基于。此外,还应移动调用
showFeederDateWiseDetails()
内部try...catch
区块:改变
column1
,column2
及column3
查询返回的列的实际名称。