首页 > 解决方案 > 如何使用从微调器中选择的项目

问题描述

我有一个微调器。我用数据库表中的数据(一列)填充它。现在,当用户从微调器中选择一个项目时。我想要数据库中的一个函数,它返回所选项目的相应主键。在我的主要活动中,主键应该存储在一个变量中。我怎样才能做到这一点。

这是我在主要活动中的代码:

if(spinner.getSelectedItem() != null){
    spinner_text = (String) spinner.getSelectedItem();
    try {
        substation_number = myDB.spinnerResult(spinner_text);
    } catch (NumberFormatException e) {
        Toast.makeText(getApplicationContext(), "Please select an item", Toast.LENGTH_SHORT).show();
    }
}

这是我在数据库中的功能:

public int spinnerResult(String item_name){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("Select substationNo from " + TABLE_NAME + " where item_name = ?", new String[]{item_name});
    return Integer.parseInt(String.valueOf(cursor));
}

标签: javaandroidsqliteandroid-sqliteandroid-spinner

解决方案


您获得的游标rawQuery()应最多返回 1 行(如果item_name在表中是唯一的)和 1 列。
您必须检查您传递moveToFirst()item_name是否存在于表中,然后substationNo从游标中提取 的值:

public int spinnerResult(String item_name){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("Select substationNo from " + TABLE_NAME + " where item_name = ?", new String[]{item_name});
    int result = 0; // you may change this
    if (cursor.moveToFirst()) result = cursor.getInt(0);
    cursor.close();
    db.close();
    return result;
}

如果item_name您传递的 不存在于表中,则函数返回0,您可以根据需要更改为-1,您可以检查它以验证是否item_name找到了。


推荐阅读