display listview in same activity after query

0

I have this query layout with a Listview:

AftertypingRadioButtonandtypingthesearchparameterIwouldlikethelisttoappearwiththedatabasedata(detail,IhaveaListviewthatreturnsallthedataregisteredinthebankworkingnormally),butIIclickonsearchandnothinghappens,norreturnerror,I'musingthesameadapterfrommyotherlistthatisworkingnormally.

IstheproblembecauselistviewisinthesameQueryActivity?

MyQueryActivity:

publicclassConsultaActivityextendsAppCompatActivity{privateLivrolivro=newLivro();privateRadioGroupradioGroup;privateEditTexteditText;privateListViewlvConsulta;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_consulta);radioGroup=(RadioGroup)findViewById(R.id.rdgOpcoes);editText=(EditText)findViewById(R.id.edtconsulta);lvConsulta=(ListView)findViewById(R.id.lvConsulta);}publicvoidconsultar(Viewview){LivroCRUDlivroCRUD=newLivroCRUD(this);try{switch(radioGroup.getCheckedRadioButtonId()){caseR.id.rbtnTitulo:livro.setTitulo(editText.getText().toString());List<Livro>listaTitulo=livroCRUD.buscarTitulo(livro);lvConsulta.setAdapter(newLivroAdapter(this,listaTitulo));Toast.makeText(this,"passou pelo processo......", Toast.LENGTH_SHORT).show();
                break;
            case R.id.rbtnAutor:
                    livro.setAutor(editText.getText().toString());
                    List<Livro> listaAutor = livroCRUD.buscarAutor(livro);
                    lvConsulta.setAdapter(new LivroAdapter(this, listaAutor));
                break;
            case R.id.rbtnEditora:
                    livro.setEditora(editText.getText().toString());
                    List<Livro> listaEditora = livroCRUD.buscarEditora(livro);
                    lvConsulta.setAdapter(new LivroAdapter(this, listaEditora));
                break;
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "Não foi possivel realizar a consulta....", Toast.LENGTH_SHORT).show();
    }
}

}

One of the search methods by parameters:

EDIT: change query method after @ramaral's tips

//BUSCAR POR TITULO
public List<Livro> buscarTitulo(String titulo) throws Exception{
    List<Livro> lista = new ArrayList<Livro>();
    String[] colunas = new String[]{"_id","titulo","autor","editora"};

    Cursor cursor = db.query("livro", colunas, "titulo= ?",new String[]{titulo},null,null,null);
    //Percorre o cursor se tiver registos
    //Se não for nulo move para o primeiro registo
    if(cursor != null && cursor.moveToFirst()){
        do {
            Livro livroTitulo = new Livro();
            //retornar os valores e adiciona na lista
            livroTitulo.setId(cursor.getInt(0));
            livroTitulo.setTitulo(cursor.getString(1));
            livroTitulo.setAutor(cursor.getString(2));
            livroTitulo.setEditora(cursor.getString(3));
            lista.add(livroTitulo);
        }while (cursor.moveToNext());
    }

    return (lista);
}
    
asked by anonymous 30.01.2016 / 14:52

1 answer

1

No, the problem will not be to have the ListView in the same Activity.

There are "problems" in the code but, at the start, they are no reason not to work as you want.
I say "on departure" because I do not have an overview of it.

The "problems" I encounter are:

  • There is no reason to pass a Book to the buscarTitulo() method. It should receive a String , with the Title to search.
  • The WHERE clause must be constructed using parameters
  • You should test if the course is not null before you use it.

Search by Title:

public List<Livro> buscarTitulo(String titulo) throws Exception{
    List<Livro> lista = new ArrayList<Livro>();
    String[] colunas = new String[]{"_id","titulo","autor","editora"};

    Cursor cursor = db.query("livro",
                             colunas,
                             "titulo = ?", new String[] {titulo()},
                             null, null, null);

    //Percorre o cursor se tiver registos
    //Se não for nulo move para o primeiro registo
    if(cursor != null && cursor.moveToFirst()){
        do {
            Livro livroTitulo = new Livro();
            //retornar os valores e adiciona na lista
            livroTitulo.setId(cursor.getInt(0));
            livroTitulo.setTitulo(cursor.getString(1));
            livroTitulo.setAutor(cursor.getString(2));
            livroTitulo.setEditora(cursor.getString(3));
            lista.add(livroTitulo);
        }while (cursor.moveToNext());
    }

    return lista;
}

Remember that to find a record you have to write the title as it was recorded.

Consider using MATCH instead of = to look up the Title (s). The following query will fetch all books whose title begins with String passed to method (variable titulo ).

Cursor cursor = db.query("livro",
                         colunas,
                         "titulo MATCH ?", new String[] {titulo + "*"},
                         null, null, null);

Make sure you have not forgotten to declare the onClick event of the button as the consultar()

    
30.01.2016 / 15:49