GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

ListView não aparece informações

java
arraylist
android
sqlite
list
Tags: #<Tag:0x00007fda09b9daf8> #<Tag:0x00007fda09b9d990> #<Tag:0x00007fda09b9d850> #<Tag:0x00007fda09b9d710> #<Tag:0x00007fda09b9d5d0>

#1

Boa noite pessoal,

estou com um problema em que tenho uma activity que cria uma nova quadra, e outra que lista todas as quadras já criadas, porém ao armazenar a quadra nova no sqlite e ir para a lista de quadras ela(s) não aparecem no ListView

public class NovaQuadraActivity extends Activity {

private EditText textoNomeQuadra;
private EditText textoEnderecoQuadra;
private EditText textoMensalidadeQuadra;
private Spinner spinnerDuracaoPartida;
private Spinner spinnerNumeroGols;
private ImageView botaoVoltar;
private ImageView botaoSalvar;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nova_quadra);
    recuperarComponentes();
    carregaDuracaoPartida();
    carregaNumeroGols();
    //acao do botao voltar
    botaoVoltar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            intent = new Intent( NovaQuadraActivity.this, ListaQuadraActivity.class );
            finish();
            startActivity( intent );
        }
    });
    //acao do botao salvar
    botaoSalvar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            salvarQuadra();
        }
    });
}
//metodo que recupera os componentes da tela
public void recuperarComponentes(){
    textoNomeQuadra = (EditText) findViewById( R.id.textoNomeQuadraId );
    textoEnderecoQuadra = (EditText) findViewById( R.id.textoEnderecoQuadraId );
    textoMensalidadeQuadra = (EditText) findViewById( R.id.textoMensalidadeQuadraId );
    spinnerDuracaoPartida = (Spinner) findViewById( R.id.spinnerDuracaoPartidaQuadraId );
    spinnerNumeroGols = (Spinner) findViewById( R.id.spinnerNumeroGolsQuadraId );
    botaoVoltar = (ImageView) findViewById( R.id.botaoVoltarId );
    botaoSalvar = (ImageView) findViewById( R.id.botaoSalvarId );
}
//metodo que salva a informacoes digitadas pelo usuario
public void salvarQuadra(){
    if(         textoNomeQuadra.getText().toString().trim().equals("") ||
                textoEnderecoQuadra.getText().toString().trim().equals("") ||
                textoMensalidadeQuadra.getText().toString().trim().equals("") ||
                spinnerDuracaoPartida.getAdapter().toString().equals("") ||
                spinnerNumeroGols.getAdapter().toString().equals("") )
    {
        Toast.makeText( NovaQuadraActivity.this, "Preencha todos os campos", Toast.LENGTH_SHORT ).show();
    } else {
        QuadraModel quadraModel = new QuadraModel();
        quadraModel.setNome_quadra( textoNomeQuadra.getText().toString().trim() );
        quadraModel.setEndereco_quadra( textoEnderecoQuadra.getText().toString().trim() );
        quadraModel.setMensalidade_quadra( Double.parseDouble( textoMensalidadeQuadra.getText().toString() ) );
        quadraModel.setTemp_part_quadra( spinnerDuracaoPartida.getAdapter().toString() );
        quadraModel.setNr_gols_quadra( spinnerNumeroGols.getAdapter().toString() );
        new QuadraRepository(this).salvarQuadra( quadraModel );
        Toast.makeText( NovaQuadraActivity.this, "Quadra "+ quadraModel.getNome_quadra() + " adicionada", Toast.LENGTH_SHORT ).show();
        intent = new Intent( NovaQuadraActivity.this, ListaQuadraActivity.class );
        finish();
        startActivity( intent );
    }
}
protected void carregaDuracaoPartida(){
    String[] duracaoPartida = {"5 minutos", "6 minutos", "7 minutos","8 minutos", "9 minutos", "10 minutos"};
    ArrayAdapter<String> arrayAdapter;
    List<String> listaTempoJogo = new ArrayList<String>();
    for (String tJ: duracaoPartida) {
        int i = 0;
        listaTempoJogo.add( duracaoPartida[i] );
        i++;
    }
    arrayAdapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_spinner_item,
            duracaoPartida
    );
    arrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
    spinnerDuracaoPartida.setAdapter( arrayAdapter );
}
protected void carregaNumeroGols(){
    String[] numeroGols = {"2 gols", "3 gols", "4 gols","5 gols"};
    ArrayAdapter<String> arrayAdapter;
    List<String> listaNumeroGols = new ArrayList<String>();
    for (String tJ: numeroGols) {
        int i = 0;
        listaNumeroGols.add( numeroGols[i] );
        i++;
    }
    arrayAdapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_spinner_item,
            numeroGols
    );
    arrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
    spinnerNumeroGols.setAdapter( arrayAdapter );
}

}

public class ListaQuadraActivity extends Activity {
ImageView botaoBuscar;
EditText textoBusca;
ImageView botaoNovaQuadra;
ListView listaQuadras;
Intent intent;
AlertDialog.Builder dialog;
ArrayAdapter<String> itensAdaptador;
DatabaseFutebas databaseFutebas;
QuadraRepository quadraRepository;
ArrayList<String> quadras;
ArrayList<Integer> ids;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_quadra);
    try {
        this.listaQuadras();
        this.recuperarComponentes();
        //quadraRepository.listaQuadras();
        //ação do botão de busca
        botaoBuscar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String buscarQuadra = textoBusca.getText().toString();
                buscarQuadra(buscarQuadra);
                Toast.makeText( ListaQuadraActivity.this, "Botao Buscar", Toast.LENGTH_SHORT ).show();
            }
        });
        //IR DE LISTA QUADRA PARA TELA DE CADASTRO DE QUADRA
        botaoNovaQuadra.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                intent = new Intent(ListaQuadraActivity.this, NovaQuadraActivity.class);
                finish();
                startActivity(intent);
            }
        });
        listaQuadras.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //caixaDialogo(i);
            }
        });
    }catch (Exception e){
        e.printStackTrace();
    }
}
//método que recupera os componentes criados
public void recuperarComponentes(){
    botaoBuscar = (ImageView) findViewById(R.id.buscarQuadraId);
    textoBusca = (EditText) findViewById(R.id.editTextBuscarId);
    botaoNovaQuadra = (ImageView) findViewById(R.id.novaQuadraId);
    listaQuadras = (ListView) findViewById(R.id.listViewQuadrasId);
}
//método para buscar uma quadra na caixa de pesquisa
public void buscarQuadra(String textoBusca){
}
//método para exclusão da quadra selecionada
public void excluirQuadra( int idQuadra ){
    //DELETE FROM tabela_quadra WHERE cod_quadra = "+ idQuadra +";";
    Toast.makeText( ListaQuadraActivity.this, "Quadra excluída", Toast.LENGTH_SHORT ).show();
}
//método que cria uma caixa de diálogo para exclusão da quadra
public void caixaDialogo(final int idQuadra){
    dialog = new AlertDialog.Builder( getApplicationContext() );
    dialog.setTitle( "Opções" );
    dialog.setMessage( "Você deseja excluir a quadra selecionada?" );
    //dialog.setIcon(  );
    dialog.setNegativeButton("Não", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            //nao faz nada e fecha a caixa de diálogo
        }
    });
    dialog.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            excluirQuadra( idQuadra );
        }
    });
}
public void listaQuadras(){
    try{
        //databaseFutebas.getConexaoDataBase();
        Cursor cursor = databaseFutebas.getConexaoDataBase().rawQuery( "SELECT nome_quadra FROM tabela_quadra", null );
        int indiceColunaCod             = cursor.getColumnIndex( "cod_quadra" );
        int indiceColunaNome            = cursor.getColumnIndex( "nome_quadra" );
        int indiceColunaEndereco        = cursor.getColumnIndex( "endereco_quadra" );
        int indiceColunaMensalidade     = cursor.getColumnIndex( "mensalidade_quadra" );
        int indiceColunaTempoPartida    = cursor.getColumnIndex( "temp_part_quadra" );
        int indiceColunaNumeroGols      = cursor.getColumnIndex( "nr_gols_quadra" );
        //criar adaptador
        quadras = new ArrayList<>();
        ids = new ArrayList<>();
        itensAdaptador = new ArrayAdapter<String>( getApplicationContext(),
                android.R.layout.simple_list_item_1,
                android.R.id.text1,
                quadras);
        listaQuadras.setAdapter( itensAdaptador );
        cursor.moveToFirst();
        while( cursor != null ){
            Log.i( "Nome: ", cursor.getString( indiceColunaNome ) );
            quadras.add( cursor.getString( indiceColunaNome ) );
            cursor.moveToNext();
        }
        cursor.close();
    }catch (Exception e){
        e.printStackTrace();
    }

}
}

Obrigado desde já.

Os códigos comentados são alguma das coisas que já tentei.
Do jeito que está o app diz que a informação foi salva, porém volta pra activitycom a listview vazia


#2

Boa Noite novamente, consegui uma parte do erro, mas ainda não aparece a lista com as quadras criadas. O trecho do log onde conta o erro diz isso:
> 09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.database.sqlite.SQLiteDatabase cco.com.futebasapp.classes.DatabaseFutebas.getConexaoDataBase()’ on a null object reference

09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at cco.com.futebasapp.ListaQuadraActivity.listaQuadras(ListaQuadraActivity.java:150)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at cco.com.futebasapp.ListaQuadraActivity.onCreate(ListaQuadraActivity.java:62)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.Activity.performCreate(Activity.java:6904)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:229)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.os.Looper.loop(Looper.java:148)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7325)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
09-21 21:07:15.924 10508-10508/cco.com.futebasapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)


#3

Link para download do projeto: https://drive.google.com/drive/folders/0B_OBTqbtPBi-SmRTZFlGVnN6bkU?usp=sharing


#4

Boa tarde.

Vc está tomando um NullPointerException no metodo listaQuadra, exatamente porque comentou o código

databaseFutebas.getConexaoDataBase();

A chamada “cursor.moveToNext();” devolve um booleano, e esse seu trecho de codigo

while( cursor != null ) {}

eu acho que fica num loop infinito ou essa parte nunca é executada, porque se cursor for nulo vai dar NullPointeException, pois uma linha acima vc o usa chamando “cursor.moveToFirst()”


#5

Aqui um exemplo de como faço uma query no banco, populo uma lista e devolvo para quem chamou o método.

    if(cursor != null && cursor.moveToFirst()) {
        do {
            int idxDescription      = cursor.getColumnIndex(FIELDS[1]);
            int idxQtAccumulated    = cursor.getColumnIndex("QUANTITY_MATERIAL");
            int idxMaterialCode     = cursor.getColumnIndex(FIELDS[2]);
            int idxMaterialSerial   = cursor.getColumnIndex(FIELDS[5]);
            String description = cursor.getString(idxDescription);
            String code = cursor.getString(idxMaterialCode);
            String serial = cursor.getString(idxMaterialSerial);
            long quantity = cursor.getLong(idxQtAccumulated);
            Material material = new Material();
            material.setDescription(description);
            material.setCode(code);
            material.setLot(serial);
            material.setQuantity(quantity);
            materials.add(material);
        } while (cursor.moveToNext());
    }

Os método “getColumnIndex” me devolve um inteiro. Imagine que cada linha que retorna do select é um array (tupla)
para cada atributo que vc colocou no seu SELECT, vc tem um indice que vai de 0 a N-atributos. Para vc saber qual é o indice desse atributo, vc tem que passar o nome dele. Esse vetor FIELDS guarda os atributos (campos) da minha tabela, que são usados para fazer as queries.

A chama " cursor.getString(idxDescription)" me retorna uma descricao, que foi um dos atributos que eu coloquei no SELECT.

Entendeu como funciona ? Eu vi que sua variavel ids so é instanciada mais nunca vc a popula. Esse ArrayList foi o que vc inseriu no adapter da sua listview, portanto é ele que vc tem q popular para aparecer alguma coisa.


#6

Boa Tarde Chris!

Segui seus passos, e o erro continua sendo de NullPointerException, porém não mais por causa do BD, segue abaixo a mensagem:

09-22 15:57:24.382 15321-15321/cco.com.futebasapp W/System.err: java.lang.NullPointerException: println needs a message
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.util.Log.println_native(Native Method)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.util.Log.i(Log.java:207)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at cco.com.futebasapp.ListaQuadraActivity.listaQuadras(ListaQuadraActivity.java:149)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at cco.com.futebasapp.ListaQuadraActivity.onCreate(ListaQuadraActivity.java:64)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.Activity.performCreate(Activity.java:6904)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.ActivityThread.access$1100(ActivityThread.java:229)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.os.Looper.loop(Looper.java:148)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7325)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
09-22 15:57:24.392 15321-15321/cco.com.futebasapp W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

No meu bloco de código eu entendi e o refiz seguindo seu exemplo:

if( cursor != null && cursor.moveToFirst() ){
do{

                int indiceColunaCod             = cursor.getColumnIndex( "cod_quadra" );
                int indiceColunaNome            = cursor.getColumnIndex( "nome_quadra" );
                int indiceColunaEndereco        = cursor.getColumnIndex( "endereco_quadra" );
                int indiceColunaMensalidade     = cursor.getColumnIndex( "mensalidade_quadra" );
                int indiceColunaTempoPartida    = cursor.getColumnIndex( "temp_part_quadra" );
                int indiceColunaNumeroGols      = cursor.getColumnIndex( "nr_gols_quadra" );
                int codQuadra               = cursor.getInt( indiceColunaCod );
                String nomeQuadra           = cursor.getString( indiceColunaNome );
                String enderecoQuadra       = cursor.getString( indiceColunaEndereco );
                double mensalidadeQuadra    = cursor.getDouble( indiceColunaMensalidade );
                String tempoPartidaQuadra   = cursor.getString( indiceColunaTempoPartida );
                String numeroGolsQuadra     = cursor.getString( indiceColunaNumeroGols );
                Log.i( "Nome: ", cursor.getString( indiceColunaNome ) );
                quadraModel = new QuadraModel();
                quadraModel.setCod_quadra( codQuadra );
                quadraModel.setNome_quadra( nomeQuadra );
                quadraModel.setEndereco_quadra( enderecoQuadra );
                quadraModel.setMensalidade_quadra( mensalidadeQuadra );
                quadraModel.setTemp_part_quadra( tempoPartidaQuadra );
                quadraModel.setNr_gols_quadra( numeroGolsQuadra );
                quadras.add( quadraModel );
            }while ( cursor.moveToNext() );
        }

Agradeço a ajuda e a paciência!


#7

Segundo o erro que vc mostrou, a exception começa na linha 149

A linha 149 tem esse código ?

Log.i( "Nome: ", cursor.getString( indiceColunaNome ) );

Se eu não estiver enganado, esse erro acontece quando vc tenta imprimir um objeto Nulo, talvez cursor.getString( indiceColunaNome ) esteja voltando Null por isso da nullpointerexception.

Eu aconselho vc colocar um breakpoint na linha que tem esse código

 int indiceColunaCod  

Com a tecla F8 vc o depurador vai passar linha a linha do seu código. O android studio tem uma aba, no canto inferior da tela chamada “debug”. Usando o debug vc pode ver os valores das suas variáveis em tempo de execução.

Qualquer dificuldade só falar. \o


#8

Obrigado Chris, resolvido!

tirei a mensagem de log e funcionou(além de usar a variavel ids para referenciar o indiceColunaCod)