bind值为null

fsi0uk1n  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(327)

我有两项活动。通过intent将数据从一个活动发送到另一个活动。然后我从数据库调用一个函数来显示该行的所有记录。
在这里 feeder_nodate 是复合主键。我没有任何记录的空值,但索引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);
}
r1zk6ea1

r1zk6ea11#

您的代码存在一些问题。
自从 feeder_nodate 如果是复合主键,那么您应该期望查询最多返回1行,因此在获得光标后不需要循环。
一个简单的电话 cursor.moveToFirst() 足够检查光标是否返回一行。
然后,当您通过调用 showFeederDateWiseDetails() 你必须检查它是否正确 null .
如果不是,则获得列值(无需调用 moveToFirst() 同样,以前已经完成了)。
最后,不是直接通过它们的索引(在返回许多列的查询中这是不安全的)获取列值,而是通过 getColumnIndex() 使用他们的名字。
您应该知道,在中使用的索引1 t1.setText(answer.getString(1)); 返回第二列的值,因为索引为 0 基于。
此外,还应移动调用 showFeederDateWiseDetails() 内部 try...catch 区块:

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});
    if (cursor.moveToFirst()) return cursor;
    return null;
}
.........................................................................
Intent intent = getIntent();
try {
    feeder_no = Integer.parseInt(intent.getStringExtra("feeder_no"));
    String date = intent.getStringExtra("date");
    Cursor answer = myDB.showFeederDateWiseDetails(feeder_no, date);
    if (answer != null) {
        t1.setText(answer.getString(answer.getColumnIndex("column1")));
        t2.setText(answer.getString(answer.getColumnIndex("column2")));
        t3.setText(answer.getString(answer.getColumnIndex("column3")));
    }
    answer.close();
} catch (NumberFormatException e) {
    Toast.makeText(getApplicationContext(), "....", Toast.LENGTH_SHORT).show();
}

改变 column1 , column2column3 查询返回的列的实际名称。

相关问题