【发布时间】:2019-05-24 00:59:40
【问题描述】:
当单击 Listview 项目时,应从 SQLite 数据库中提供特定于该 Listview 项目的数据,但所有 Listview 项目的数据都可用。我该如何纠正这个问题?
Main2Activity:
position = intent.getIntExtra("position",0);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String text = listView.getItemAtPosition(position).toString();
Toast.makeText(Main2Activity.this, ""+text, Toast.LENGTH_SHORT).show();
}
});
add_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String place = editText.getText().toString();
if(!place.equals("")&& databaseHelper1.insertData1(place)){
editText.setText("");
listItem.clear();
viewData1();
} else
{
Toast.makeText(Main2Activity.this, "Data not added", Toast.LENGTH_SHORT).show();
}
}
});
}
private void viewData1() {
Cursor cursor = databaseHelper1.viewData1(position);
if(cursor.getCount()==0){
Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
}else
{
while(cursor.moveToNext()){
listItem.add(cursor.getString(0));
}
listView.setAdapter(adapter);
}
}
数据库助手: 这些是我的桌子:
private static final String CREATE_TABLE = "CREATE TABLE " + DB_TABLE + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME
+ " TEXT " + ")";
private static final String CREATE_TABLE1 = "CREATE TABLE " + DB_TABLE1 + " (" + ID1 + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
PLACE + " TEXT " + " , " + ID + " INTEGER REFERENCES " + DB_TABLE + ")";
我的 insertData 函数:
public boolean insertData1(String place) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues1 = new ContentValues();
contentValues1.put(PLACE,place);
long result1 = sqLiteDatabase.insert(DB_TABLE1,null,contentValues1);
return result1 != -1;
}
我的 viewData 函数:
public Cursor viewData1(int position)
{
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor cursor = null;
if (position==0) {
String query = "Select " + DB_TABLE1 + "." + PLACE + " from " + DB_TABLE1;
cursor= sqLiteDatabase.rawQuery(query, null);
}
if (position==1) {
String query = "Select " + DB_TABLE1 + "." + PLACE + " from " + DB_TABLE1;
cursor= sqLiteDatabase.rawQuery(query, null);
}
return cursor;
}
使用此代码,我可以将数据库中的所有数据都提供给 Listitem 位置,无论它是位置 0 还是位置 1。 实际输出应该是每个数据与点击的item一致。
【问题讨论】:
-
您能告诉我们您在
viewData1中使用的确切SQL 吗?在我看来,position==0和position==1的 SQL 似乎是相同的? -
发送完整的适配器代码
-
我从 Main2Activity 传递“位置”(它出现在上面的 viewData1 函数中),它基本上是点击的位置。我不会使用相同的 SQL,因为它取决于单击的位置但相同的表。 @Corion
-
我添加了代码@Radesh
-
看
viewData1函数,不管position是1还是0,它运行的SQL都是相同的。请告诉我SQL的不同之处。