quarta-feira, outubro 03, 2012

Erro NullPointerException ao usar notifyDataSetChanged no Android

HI,

Vou contar um pouco da história primeiro.

Resolvi colocar uma opção de busca em uma ListActivity. Coisa simples, apenas um like no whera da query de pesquisa. Fazia um busca e não atualizava a tela e quando eu pressionava algum item dava erro. É que a query não retornava nada e dava erro, só percebi que a query não tava retornando nada depois de um bom tempo. Para atualizar eu precisava usar o comando notifyDataSetChanged() (detalhe: se a query retorna algum registro, a tela era atualizada,  a bronca era só quando não retornava registros)

Esse é o bloco de comandos que atualiza a tela, a list ou uma mensagem indicando que não retornou nada.


    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            if ((dias == null) || (dias.size() == 0)) {
                empty.setText("Listagem Vazia");
            } else {
                mAdapter = new MyCustomAdapter();
                setListAdapter(mAdapter);
            }
        }
    };


Coloquei o comando notifyDataSetChanged() após o empty.setText("Listagem Vazia"); e ficou funcionando blz. Mas... quando fui testar num tablet e não tinha registro ainda, quando fui acessar a tela, deu erro de java.lang.NullPointerException. Fiquei sem entender um pouco por que fui testar no smartphone excluíndo todos os registro e mostrou a mensagem Listagem Vazia, mas quando sair e voltei pra tela, deu o mesmo erro. Pesquisando mais uma vez no google, encontrei a solução, graças a Deus e a quem colocou.

o bloco de comando ficou assim:


    private final Handler handler = new Handler() {

        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            if ((dias == null) || (dias.size() == 0)) {
                empty.setText("Listagem Vazia");
               
               
                if (mAdapter != null){
                mAdapter.notifyDataSetChanged();
                }

            } else {
                mAdapter = new MyCustomAdapter();
                setListAdapter(mAdapter);
            }
        }
    };



Achei aqui

Android java.lang.RuntimeException: Unable to resume activity
http://stackoverflow.com/questions/10897551/android-java-lang-runtimeexception-unable-to-resume-activity

foi preciso colocar um teste para saber se o adapter era null.

Agora tá 100% o lance da pesquisa



Fiquem na Paz!!!

Nenhum comentário: