method update (sqlite) does not update database data

0

I have a listView that displays the items of the database with an update button, this button calls the screen with the values set in the editText, I edit, I click save, it returns me the updated update message, but does not update the data, they still appear the same in the listView.

method that receives the values and calls the method updates from the database:

public void atualizar(View view){
    Livro livro = new Livro();
    livro.setTitulo(edtTitulo.getText().toString());
    livro.setAutor(edtAutor.getText().toString());
    livro.setEditora(edtEditora.getText().toString());

    LivroCRUD livroCRUD = new LivroCRUD(this);
    try {
        livroCRUD.atualizar(livro);
        Toast.makeText(this, "Livro Atualizado com sucesso!!!!", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "Não foi possivel atualizar.....!!!!", Toast.LENGTH_LONG).show();
    }
}

method that updates the information in the database:

public void atualizar(Livro livro) throws Exception{
    ContentValues values = new ContentValues();
    values.put("titulo ", livro.getTitulo());
    values.put("autor ", livro.getAutor());
    values.put("editora ", livro.getEditora());

    db.update("livro ", values, "_id = ? ", new String[]{" "+livro.getId()});
}

method that populates list:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LivroCRUD livroCRUD = new LivroCRUD(this);
    try {
        List<Livro> lista = livroCRUD.buscarTodos();

        ListView lvPrincipal = (ListView) findViewById(R.id.lvPrincial);
        lvPrincipal.setAdapter(new LivroAdapter(this, lista));


    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "Não foi possivel carregar a lista.", Toast.LENGTH_SHORT).show();
    }
}

method of clicking the refresh button on the adapter, it takes the values and passes to the activity "AddUpdateActivity"

Button btnAtualizar = (Button) layout.findViewById(R.id.btnChamaAtualizar);
    btnAtualizar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Livro livro = new Livro();
            Intent intent = new Intent(context, AddUpdateActivity.class);
            intent.putExtra("titulo", lista.get(auxPosition).getTitulo());
            intent.putExtra("autor", lista.get(auxPosition).getAutor());
            intent.putExtra("editora", lista.get(auxPosition).getEditora());
            intent.putExtra("_id", lista.get(auxPosition).getId());
            context.startActivity(intent);

        }
    });
    
asked by anonymous 25.01.2016 / 18:44

2 answers

1

You are not updating the database data because the values passed to the db.update() method are bad: remove the space in "livro " and " "+livro.getId() :

db.update("livro", values, "_id = ? ", new String[]{""+livro.getId()});

In addition, in the atualizar(View view) method, you have to assign the Id to the Book you want to update, so that it is passed to the db.update() method:

public void atualizar(View view){
    Livro livro = new Livro();
    livro.setTitulo(edtTitulo.getText().toString());
    livro.setAutor(edtAutor.getText().toString());
    livro.setEditora(edtEditora.getText().toString());

    livro.setId = id;//O id deve ser recuperado do Extra passado à AddUpdateActivity

    LivroCRUD livroCRUD = new LivroCRUD(this);
    try {
        livroCRUD.atualizar(livro);
        Toast.makeText(this, "Livro Atualizado com sucesso!!!!", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "Não foi possivel atualizar.....!!!!", Toast.LENGTH_LONG).show();
    }
}

Changing the data in the DB may not be enough for the ListView to be updated, unless you are using LoaderManager in conjunction with a CursorLoader .

The way you have structured code is not easy to put here a ready solution.

What you have to do is inform the BookAdapter of the changes so that it updates the ListView .

There are several ways you can declare a method in the BookAdapter that updates the internal list.

public void actualizaLista(List<Livro> lista){

    this.nomeDaSuaLista = lista; 
    notifyDataSetChanged();
}

After the data is changed in the DB, call it:

List<Livro> lista = livroCRUD.buscarTodos();
lvPrincipal.getAdapter().actualizaLista(lista);
    
25.01.2016 / 19:48
-2

When you pass the parameter you are informing an array, however you are using "=?", remove this "new String", getting:

db.update("livro ", values, "_id = ? ", livro.getId());
    
25.01.2016 / 19:01