2
respostas

Fatal exception MAIN

Não consegui achar o erro na classe AlunoSincronizador

2021-02-09 13:59:34.606 8482-8482/com.example.webservicep3 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.webservicep3, PID: 8482
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.webservicep3.dto.AlunoSync.getMomentoDaUltimaModificacao()' on a null object reference
        at com.example.webservicep3.sinc.AlunoSincronizador$1.onResponse(AlunoSincronizador.java:62)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:169)
        at android.app.ActivityThread.main(ActivityThread.java:6521)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
2 respostas
package com.example.webservicep3.sinc;

import android.content.Context;
import android.util.Log;

import androidx.annotation.NonNull;

import com.example.webservicep3.dao.AlunoDAO;
import com.example.webservicep3.dto.AlunoSync;
import com.example.webservicep3.event.AtualizaListaAlunoEvent;
import com.example.webservicep3.modelo.Aluno;
import com.example.webservicep3.preferences.AlunoPreferences;
import com.example.webservicep3.retrofit.RetrofitInicializador;

import org.greenrobot.eventbus.EventBus;
import org.jetbrains.annotations.NotNull;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class AlunoSincronizador {
    private final Context context;
    private EventBus bus = EventBus.getDefault();
    private AlunoPreferences preferences;

    public AlunoSincronizador(Context context) {
        this.context = context;
        preferences = new AlunoPreferences(context);

    }

    public void buscaTodos(){
        if(preferences.temVersao()){
            buscaAlunosNovos(); //buscaNovos
        }else{
            buscaAlunos();
        }
    }

    private void buscaAlunosNovos() {
        String versao = preferences.getVersao();
        Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().novos(versao);

        call.enqueue(buscaAlunosCallBack());
    }

    private void buscaAlunos() {
        Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().lista();

        call.enqueue(buscaAlunosCallBack());
    }

    @NonNull
    private Callback<AlunoSync> buscaAlunosCallBack() {
        return new Callback<AlunoSync>() {
            @Override
            public void onResponse(Call<AlunoSync> call, Response<AlunoSync> response) {
                AlunoSync alunoSync = response.body();
                String versao = alunoSync.getMomentoDaUltimaModificacao();

                preferences.salvaVersao(versao);

                AlunoDAO dao = new AlunoDAO(context);
                dao.sincroniza(alunoSync.getAlunos());
                dao.close();

                Log.i("versao", preferences.getVersao());

                bus.post(new AtualizaListaAlunoEvent());
            }

            @Override
            public void onFailure(Call<AlunoSync> call, Throwable t) {
                Log.e("onFailure chamado", t.getMessage());
                bus.post(new AtualizaListaAlunoEvent());
            }
        };
    }
    public void sincronizaAlunosInternos(){
        AlunoDAO dao = new AlunoDAO(context);
        List<Aluno> alunos = dao.listaNaoSincronizados();

        Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().atualiza(alunos);

        call.enqueue(new Callback<AlunoSync>() {
            @Override
            public void onResponse(Call<AlunoSync> call, Response<AlunoSync> response) {
                AlunoSync alunoSync = response.body();
                dao.sincroniza(alunoSync.getAlunos());
                dao.close();
            }

            @Override
            public void onFailure(Call<AlunoSync> call, Throwable t) {

            }
        });
    }
}

Opa Matheus, blz?

A mensagem da exception indica referência nula, provavelmente é problema de conversão do json para AlunoSync. Verifique as seguintes possibilidades:

  • Se a comunicação está ocorrendo como esperado pelo logging interceptor.
  • Se o AlunoSync está com os nomes dos atributos corretos para fazer a conversão com o json.

Caso não identificar o problema, compartilhe comigo o log do logging interceptor e a classe AlunoSync para facilitar a investigação do problema e sugerir uma possível solução.

[]s