Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na sincronizacao dos dados com o servidor usando thread

Ocorre o erro abaixo:

05-23 16:12:10.634: E/AndroidRuntime(10749): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Estou criando uma nova thread para o envio dos dados para o servidor. Meu codigo ficou assim na ListaAlunosActivity.

    /**
     * Executa as funcoes da barra de acoes
     * 
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.novo:
            Intent formularioIntent = new Intent(this, FormularioActivity.class);
            startActivity(formularioIntent);
            return false;
        case R.id.enviar:
            new Thread(){
                public void run() {
                    new EnviaAlunosTask(ListaAlunosActivity.this).execute();
                }
            }.start();

            return false;
        default:
            super.onOptionsItemSelected(item);
        }
        return false;
    }
1 resposta
solução!

Quando você faz:

new Thread(){
    public void run() {
        new EnviaAlunosTask(ListaAlunosActivity.this).execute();
    }
}.start();

Você está disparando uma AsyncTask (nossa EnviaAlunosTask) dentro de uma outra Thread. Porém, ao usar AsyncTasks não temos necessidade de nós mesmo gerenciar uma Thread na mão. É justamente isso que aparece na stacktrace:

Can't create handler inside thread that has not called Looper.prepare()

Basicamente, ele diz que não é possível criar um handler (no caso, nossa AsyncTask) diretamente dentro de outra Thread.

Então, para resolver isso, basta chamarmos nossa AsyncTask sem usar uma Thread:

new EnviaAlunosTask(ListaAlunosActivity.this).execute();

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software