#java #android #android-sqlite
#java #Android #android-sqlite
Вопрос:
Я разрабатываю приложение, которое требует регистрации пользователя, база данных (SQLite) содержит три таблицы: таблицу cliente, в которой есть все, что есть в таблице usuario, таблицу trabalhador, в которой есть еще две строки, которых нет в таблице usuario, и таблицу usuario, в которой есть вся информация для зарегистрированных пользователей, но я не уверен, нужен ли еще идентификатор для этих двух таблиц, таблица trabalhador и таблица клиентов, потому что, если я зарегистрирую любого из них, оба будут обычными, но у меня были сомнения, когда я думал о том, как показать вновь зарегистрированному пользователю его недавно зарегистрированную информацию.
У меня есть хорошая идея, как показать ArrayList с информацией обо всех уже зарегистрированных пользователях:
public ArrayList<Usuario> getAllUsuarios() {
ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>();
String query = "SELECT * FROM " TABELA_USUARIOS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
Usuario usuario = cursorToUsuario(cursor); //método criado no banco de dados
listaUsuarios.add(usuario);
} while
(cursor.moveToNext());
}
return listaUsuarios;
}
Я также создал метод в базе данных для возврата только пользователя:
public Usuario getUsuario(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(
TABELA_USUARIOS,
COLUNAS,
"id = ?",
new String[]{String.valueOf(id)},
null, null, null, null);
if (cursor == null) {
return null;
} else {
cursor.moveToFirst();
Usuario usuario = cursorToUsuario(cursor); //método também criado
return usuario;
}
в activity, которое будет перенаправлено после регистрации, но проблема заключается в использовании этого метода для отображения данных последнего зарегистрированного пользователя.
Я могу создать ArrayList для запроса всех зарегистрированных пользователей в этом activity:
final ArrayList<Usuario> listaUsuarios = bd.getAllUsuarios();
ArrayAdapter<Usuario> adapter = new ArrayAdapter<Usuario>(this,
android.R.layout.simple_list_item_1, listaUsuarios);
lvListaUsuarios.setAdapter(adapter);
Я могу показать всех пользователей в этом activity, но у меня возникли проблемы с получением правильной логики для отображения только последнего пользователя…
Я был бы очень признателен, если бы кто-нибудь мог оказать мне какую-либо помощь в этом.
Комментарии:
1. пожалуйста, попробуйте использовать Ctrl Alt L перед копированием-вставкой кода
Ответ №1:
Вы можете либо использовать ORDER BY DESC
, либо использовать cursor.moveToLast()
.
с ORDER BY DESC
:
public Usuario getLastUsuarios() {
String query = "SELECT * FROM " TABELA_USUARIOS " ORDER BY id DESC";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
return cursorToUsuario(cursor);
}
// not found.
return null;
}
с cursor.moveToLast();
:
public Usuario getLastUsuario() {
SQLiteDatabase db = this.getReadableDatabase();
// get all rows in table.
Cursor cursor = db.query(TABELA_USUARIOS, null, null, null, null, null, null);
Usuario usuario = null;
if (cursor != null) {
cursor.moveToLast();
usuario = cursorToUsuario(cursor);
}
cursor.close();
return usuario;
}
Комментарии:
1. Спасибо, вы очень помогли
2. @GlaudistonNeto: Всегда пожалуйста. Если этот ответ решит проблему, пожалуйста, отметьте его как принятый ответ.