【发布时间】:2013-11-06 13:14:30
【问题描述】:
我正在尝试显示我在 Spinner 中选择的项目的主键。我想在 TextView 中显示主键。我将如何执行此操作?我已经知道如何在数据库的表中显示字段。
在我的 DatabseHandler.java 这就是我在表条件中插入数据的方式
public long insertLabelCriteria(String label, String label2, String label3){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_CRI_NAME, label);
values.put(KEY_CRI_PER, label2);
values.put(KEY_CRI_EVPK, label3);
// Inserting Row
long id = db.insert(TABLE_CRITERIA, null, values);
db.close(); // Closing database connection
return id;
}
这是我获取标签和返回标签列表的方法
public List<Criteria> getAllLabels( String evpk ){
List<Criteria> labels = new ArrayList<Criteria>();
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_CRITERIA + " WHERE "
+ KEY_CRI_EVPK + " = " + evpk ;
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
labels.add(new Criteria(cursor.getString(1)));
} while (cursor.moveToNext());
}
// closing connection
cursor.close();
db.close();
// returning lables
return labels;
}
在我的 MainActivity 中
我有一个方法 loadSpinnerData,我每次添加条件时都会使用此方法,它会加载 Spinner 以查看我在数据库中添加的项目
private void loadSpinnerData() {
// TODO Auto-generated method stub
// database handler
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
// Spinner Drop down elements
List<Criteria> lables = db.getAllLabels(evpk.getText().toString());
// Creating adapter for spinner
ArrayAdapter<Criteria> dataAdapter = new ArrayAdapter<Criteria> (this,
android.R.layout.simple_spinner_dropdown_item, lables);
// Drop down layout style - list view with radio button
dataAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
criteria_spin.setAdapter(dataAdapter);
criteria_spin.setOnItemSelectedListener(this);
}
现在,在选择项目时,如何在微调器中显示所选项目的主键? 下面这段代码只是为了显示和选择项目点击。
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
// On selecting a spinner item
String label = parent.getItemAtPosition(position).toString();
// Showing selected spinner item
Toast.makeText(parent.getContext(), "You selected: " + label,
Toast.LENGTH_LONG).show();
}
我也尝试添加这段代码,但是id显示的是arraylist编号,而不是主键
long rowId = id;
String criteriapk = String.valueOf(label);
cripk.setText(criteriapk);
我发现很难找到解决方案。我该怎么办?请帮帮我
我也试试这个方法,但是值是cursor。在TextView中,不显示数字。
public Cursor find_id_of_criteria(String label){
SQLiteDatabase db=this.getWritableDatabase();
String selectQuery = "SELECT criteria_id FROM Criteria WHERE criteria_name = "+"'" + label +"'";
Cursor id = db.rawQuery(selectQuery, null);
db.close();
return id;
}
我把这个放在 loadSpinnerdata 中
//display id of criteria
Cursor id2 = db.find_id_of_criteria(label);
String cri =(String.valueOf(id2).toString());
cripk.setText(cri);
【问题讨论】:
-
天真的方法是使用所选项目的值查询数据库(假设它是唯一的并且始终返回 1 个项目)并获取主键。最好的方法是实现您的自定义适配器,正如 AlexS 所回答的那样。
-
我在上面添加了新代码,希望你能帮助我。他们无论如何要将光标转换为长字符串吗?
-
如果您这样做,请将您的 sn-p
//display id of criteria放入onItemSelected()。然后使用long id = id2.getLong(0);获取id。注意setText()带有数字,因为它会引用字符串资源。 -
我试过了,它说 TextView 中的 setText 方法不适用于长参数。我现在该怎么办?帮帮我
-
将其转换为
String。你可以像cripk.setText(id+"");或cripk.setText(String.valueOf(id));那样做。
标签: android sqlite android-spinner