Я хочу показать данные из базы данных в ListView, и я попытался использовать rawQuery и запрос для этого.Невозможность получить данные из SQLite в ListView
Это нормально показать данные с помощью rawQuery, но при нажатии кнопки ничего не происходит. Приложение может выполняться без ошибок и просто не показывать данные по запросу.
У меня есть он googled и проверен на Android-разработчике для некоторых подсказок, но, похоже, руководство должно быть выполнено. Я был бы признателен, если бы кто-то мог сообщить мне, что пошло не так, когда я использую запрос для получения данных. Почему данные не отображаются в ListView?
Update # Я попытался изменить выбор, как показано ниже, но до сих пор не могу получить данные
первого изменения: выбор изменился, арг выбора = NULL
String selection = "Phone=1234567890";
Cursor cursor = dbRead.query(ContactContract.ContactEntry.TABLE_NAME,
projection, selection, null, null, null, sortOrder);
2-ое изменение:
String selection = "Phone=?";
String[] selectionArgs = {"1234567890"};
Cursor cursor = dbRead.query(ContactContract.ContactEntry.TABLE_NAME,
projection, selection, selectionArgs, null, null, sortOrder);
Вот слушатель:
public void onClick(View v) {
LinearLayout Layout_record = (LinearLayout) findViewById(R.id.layout_record);
ListView listView = new ListView(MainActivity.this);
Button btn = (Button) v;
Button btn_submit = (Button) findViewById(R.id.btn_submit);
Button btn_count = (Button) findViewById(R.id.btn_count);
Button btn_showAll = (Button) findViewById(R.id.btn_showAll);
TextView tv_count = (TextView) findViewById(R.id.tv_count);
ContactDBHelper mDBHelper = new ContactDBHelper(getApplicationContext());
SQLiteDatabase dbWrite = mDBHelper.getWritableDatabase();
SQLiteDatabase dbRead = mDBHelper.getReadableDatabase();
String[] projection = {
ContactContract.ContactEntry._ID,
ContactContract.ContactEntry.COLUMN_NAME_CONTACT_NAME,
ContactContract.ContactEntry.COLUMN_NAME_CONTACT_PHONE
};
String selection = "_ID=? OR Contact=? OR PHONE=?";
String[] selectionArgs = {"ID", "Contact", "Phone"};
String sortOrder = ContactContract.ContactEntry._ID + " DESC";
String queryAll = "SELECT * FROM " + ContactContract.ContactEntry.TABLE_NAME;
if(btn==btn_submit) {
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_phone = (EditText) findViewById(R.id.et_phone);
String dataName = et_name.getText().toString();
String dataPhone = et_phone.getText().toString();
ContentValues values = new ContentValues();
values.put(ContactContract.ContactEntry.COLUMN_NAME_CONTACT_NAME, dataName);
values.put(ContactContract.ContactEntry.COLUMN_NAME_CONTACT_PHONE, dataPhone);
Toast.makeText(MainActivity.this, "Loading...", Toast.LENGTH_SHORT).show();
dbWrite.insert(ContactContract.ContactEntry.TABLE_NAME, null, values);
Toast.makeText(MainActivity.this, "Completed", Toast.LENGTH_SHORT).show();
} else if (btn==btn_count) {
} else {
// Cursor cursor = dbRead.rawQuery(queryAll,null);
Cursor cursor = dbRead.query(ContactContract.ContactEntry.TABLE_NAME,
projection, selection, selectionArgs, null, null, sortOrder);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1);
cursor.moveToFirst();
while (cursor.moveToNext()) {
long itemID = cursor.getLong(cursor.getColumnIndexOrThrow(ContactContract.ContactEntry._ID));
String contactName = cursor.getString(cursor.getColumnIndexOrThrow(ContactContract.ContactEntry.COLUMN_NAME_CONTACT_NAME));
int contactPhone = cursor.getInt(cursor.getColumnIndexOrThrow(ContactContract.ContactEntry.COLUMN_NAME_CONTACT_PHONE));
String row = itemID + "-" + contactName + "~" + contactPhone;
adapter.add(row);
}
listView.setAdapter(adapter);
Layout_record.addView(listView);
dbRead.close();
}
}
Вот контракта базе данных общественного класса ContactContract { общественного ContactContract() {}
public static abstract class ContactEntry implements BaseColumns {
public static final String TABLE_NAME = "ContactBook";
public static final String COLUMN_NAME_CONTACT_NAME= "Contact";
public static final String COLUMN_NAME_CONTACT_PHONE = "Phone";
public static final String TEXT_TYPE = " TEXT";
public static final String COMMA_SEP = ",";
public static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + ContactEntry.TABLE_NAME + " (" +
ContactEntry._ID + " INTEGER PRIMARY KEY," +
ContactEntry.COLUMN_NAME_CONTACT_NAME + TEXT_TYPE + COMMA_SEP +
ContactEntry.COLUMN_NAME_CONTACT_PHONE + TEXT_TYPE +
")";
public static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + ContactEntry.TABLE_NAME;
}
}
dont использовать 'ArrayAdapter', так как ваша модель данных является sqlite db, вместо этого используйте' SimpleCursorAdapter' – pskink
. Хорошо, я попытаюсь использовать SimpleCursorAdapter, но мне интересно, не работает ли ArrayAdapter в этом случае? – TroyKC