0
I’m having problems in my Sqlite bank where I created a method in my DatabaseController.java
who is called recuperarUltimoDigitado()
- this method retrieves the entered value and then updates the list.
However, this generates an error in the first attempt to enter the data, but when re-opening the app and adding a new data, it displays a repetition in the list of the same data previously inserted in the RecyclerView
and, after that, the next data is entered and listed normally, but I would like to know what I could do to make it be solved and work properly.
public class DatabaseController {
private DatabaseInit databaseInit;
private SQLiteDatabase sql;
public DatabaseController(Context context) {
databaseInit = new DatabaseInit(context);
sql = databaseInit.getWritableDatabase();
}
public long inserir(Livro livro){
ContentValues values = new ContentValues();
values.put(Const.AUTOR_LIVRO, livro.getAutor());
values.put(Const.EDITORA_LIVRO, livro.getEditora());
values.put(Const.TITULO_LIVRO, livro.getTitulo());
return sql.insert(Const.TABLE_NAME, null, values);
}
public ArrayList<Livro> recuperar(){
ArrayList<Livro> livros = new ArrayList<>();
Cursor cursor = sql.rawQuery("SELECT " +
Const.TITULO_LIVRO + "," +
Const.EDITORA_LIVRO + "," +
Const.AUTOR_LIVRO + " FROM "+
Const.TABLE_NAME , null);
int indexColumnTitle = cursor.getColumnIndex(Const.TITULO_LIVRO);
int indexColumnAuthor = cursor.getColumnIndex(Const.AUTOR_LIVRO);
int indexColumnEditor = cursor.getColumnIndex(Const.EDITORA_LIVRO);
while (cursor.moveToNext()){
Livro livro = new Livro();
livro.setTitulo(cursor.getString(indexColumnTitle));
livro.setEditora(cursor.getString(indexColumnEditor));
livro.setAutor(cursor.getString(indexColumnAuthor));
livros.add(livro);
}
cursor.close();
return livros;
}
public Livro recuperarUltimoDigitado(){
Cursor cursor = sql.rawQuery("SELECT * FROM " + Const.TABLE_NAME + " ORDER BY ID DESC", null);
int indexColumnTitle = cursor.getColumnIndex(Const.TITULO_LIVRO);
int indexColumnAuthor = cursor.getColumnIndex(Const.AUTOR_LIVRO);
int indexColumnEditor = cursor.getColumnIndex(Const.EDITORA_LIVRO);
if(cursor.moveToFirst()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String titulo = cursor.getString(indexColumnTitle);
String autor = cursor.getString(indexColumnAuthor);
String editora = cursor.getString(indexColumnEditor);
cursor.close();
return new Livro(id, titulo, autor, editora);
}
return null;
}
}
Method on adapter to notify list update:
public void adicionarLiivro(Livro livro){
livros.add(livro);
notifyItemInserted(getItemCount());
}
Main Activity:
public class MainActivity extends AppCompatActivity {
private EditText autor, titulo, editora;
private DatabaseController controller;
private Button btn;
private RecyclerView recyclerView;
private ArrayList<Livro> livros;
private ArrayList<Livro> livrosFiltrados = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autor = findViewById(R.id.autorId);
titulo = findViewById(R.id.tituloId);
editora = findViewById(R.id.editoraId);
controller = new DatabaseController(this);
livros = controller.recuperar();
livrosFiltrados.addAll(livros);
recyclerView = findViewById(R.id.rcyId);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
final AdapterListBooks adapter = new AdapterListBooks(livrosFiltrados);
recyclerView.setAdapter(adapter);
btn = findViewById(R.id.btnId);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Livro livro = new Livro();
Livro livroRertono = controller.recuperarUltimoDigitado();
adapter.adicionarLiivro(livroRertono);
livro.setAutor(autor.getText().toString());
livro.setTitulo(titulo.getText().toString());
livro.setEditora(editora.getText().toString());
long id = controller.inserir(livro);
Toast.makeText(MainActivity.this, "Livro inserido com o Id: " + id, Toast.LENGTH_SHORT).show();
}
});
}
}
I believe the focus of the problem is on the method recuperarUltimoDigitado()
.
Your answer did not go very well and now I can not even enter data in the bank...
– Lucas Alvarenga