Olá! Estou aplicando os conteúdo ensinado nas aulas de Android em minha aplicação. Nela preciso buscar as Marcas (salvas no banco SQlite) e mostra-las na ListView assim como no exercício da agenda proposto nas aulas. Porém quando chamo o método buscaMarcas ele sobrescreve os itens que já estavam adicionados na lista.Não sei se fui claro! No Debug verifiquei que durante o while (dentro da buscaMarcas) minha lista se comportava desta maneira:
1 laço do while)
marca = {Marca@831709767544} "1 - Felipe - Schappo"
listmarcas = {ArrayList@831709766760} size = 0
2 lacço do while)
marca = {Marca@831709767648} "2 - Mayah - 322622255"
listmarcas = {ArrayList@831709766864} size = 1
0 = {Marca@831709767648} "2 - Mayah - 322622255"
3 laço do while)
marca = {Marca@831709767648} "3 - Melody - 32323232"
listmarcas = {ArrayList@831709766864} size = 2
0 = {Marca@831709767648} "3 - Melody - 32323232"
1 = {Marca@831709767648} "3 - Melody - 32323232"
Já revisei todo o código, não consigo achar o erro. Qualquer ajuda será bem vinda!
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
import br.com.showr88mapp.showr88m.modelo.Marca;
public class MarcaDAO extends SQLiteOpenHelper {
public MarcaDAO(Context context) {
super(context, "BD_SR", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "CREATE TABLE marcas (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, contato TEXT);";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
String sql = "DROP TABLE IF EXISTS marcas;";
sqLiteDatabase.execSQL(sql);
onCreate(sqLiteDatabase);
}
public void insereMarca(Marca marca){
SQLiteDatabase db = getWritableDatabase();
ContentValues dados = new ContentValues();
dados.put("nome", marca.getNome());
dados.put("contato", marca.getContato());
db.insert("marcas", null, dados);
}
public List<Marca> buscaMarcas() {
String sql = "SELECT * FROM marcas";
SQLiteDatabase database = getReadableDatabase();
Cursor cursor = database.rawQuery(sql, null);
List<Marca> listmarcas = new ArrayList<>();
Marca marca = new Marca();
while(cursor.moveToNext()){
marca.setId(cursor.getInt(cursor.getColumnIndex("id")));
marca.setNome(cursor.getString(cursor.getColumnIndex("nome")));
marca.setContato(cursor.getString(cursor.getColumnIndex("contato")));
listmarcas.add(marca);
}
cursor.close();
return listmarcas;
}
}
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.List;
import br.com.showr88mapp.showr88m.DAO.MarcaDAO;
import br.com.showr88mapp.showr88m.modelo.Marca;
public class MarcasAdminActivity extends AppCompatActivity {
private ListView listaMarcas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marcas_admin);
listaMarcas = findViewById(R.id.marcas_admin_listView);
Button btnMarcaAdd = findViewById(R.id.marcas_admin_btn_add);
btnMarcaAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentVaiParaFormularioMarca = new Intent(MarcasAdminActivity.this, FormularioMarcasActivity.class);
startActivity(intentVaiParaFormularioMarca);
}
});
registerForContextMenu(listaMarcas);
}
@Override
protected void onResume() {
super.onResume();
carregaLista();
}
private void carregaLista() {
MarcaDAO dao = new MarcaDAO(this);
List<Marca> marcas = dao.buscaMarcas();
dao.close();
ArrayAdapter<Marca> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, marcas);
listaMarcas.setAdapter(adapter);
}