Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Estou com um erro no método getView da class MensagemAdapter.java

Estou compartilhando a mensagem de erro do console:

FATAL EXCEPTION: mainProcess: com.example.guilherme.ichat_alura, PID: 28756
ava.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.guilherme.modelo.Mensagem.getId()' on a null object reference at com.example.guilherme.adapter.MensagemAdapter.getView(MensagemAdapter.java:74)

Aqui o meu codigo do metado getView:

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        View linha = activity.getLayoutInflater().inflate(R.layout.mensagem, viewGroup, false);

        ButterKnife.bind(this, linha);

        Mensagem mensagem = getItem(i);

        int idDoMensagen = mensagem.getId();

        picasso.with(activity).load("http://api.adorable.io/avatars/285/" + idDoMensagen + ".png").into(avater);

        if (idDoCliente != mensagem.getId()) {
            linha.setBackgroundColor(Color.CYAN);
        }
        texto.setText(mensagem.getText());

        return linha;
    }

O erro fala que esta retornando "null" o id da idDoMensagen.

5 respostas

Oi Guilherme, tudo bem?

Posta aí pra gente o código da classe Mensagem e da Activity

Abraços!

Já resouvi era classe Mensagem que estava com id public e mudai para private, mais agora estou com outro problema quando eu ligo o emulador e o aplicativo digito um mensagem no aplicativo, não aparece as mensagem no aplicativo fica em branco.

Mais no http://localhost:8080/ aparece as mensagem que eu enviei no aplicativo do emulador.

Vou conpartilhar o minha class javas:

public class MainActivity extends AppCompatActivity {

    private int idDoCliente = 1;

    public String tag;

    @BindView(R.id.et_text)
    public EditText editText;
    @BindView(R.id.btn_enviar)
    public Button button;
    @BindView(R.id.lv_mensagens)
    public ListView listaDeMensagens;
    @BindView(R.id.iv_avatar_mensagem)
    public ImageView avatar;

    private List<Mensagem> mensagems;

    @Inject
    public ChatService chatService;

    @Inject
    public Picasso picasso;

    @Inject
    EventBus eventBus;

    private ChatComponent component;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        picasso.with(this).load("http://api.adorable.io/avatars/285/" + idDoCliente + ".png").into(avatar);

        Log.d(tag, "o codigo passou aqui");

        ChatApplication app = (ChatApplication) getApplication();
        component = app.getComponent();
        component.inject(this);

//        listaDeMensagens = (ListView) findViewById(R.id.lv_mensagens);
//      mensagems = Arrays.asList(new Mensagem(1, "olá aluno de android"), new Mensagem(2, "oi"));

        mensagems = new  ArrayList<>();
        MensagemAdapter adapter = new MensagemAdapter(idDoCliente, mensagems, this);
        listaDeMensagens.setAdapter(adapter);

        Call<Mensagem> call = chatService.ouvirMensagens();
        call.enqueue(new OuvirMensagensCallback(eventBus, this));

        eventBus.register(this);
    }

    @OnClick(R.id.btn_enviar)     // metado chamar os componentes usando as dependencias butterknife
    public void enviarMensagem(){
        chatService.enviar(new Mensagem(idDoCliente, editText.getText().toString())).enqueue(new EnviarMensagemCallback());
    }

    @Subscribe
    public void colocaNaLista(MensagemEvent mensagemEvent){
        mensagems.add(mensagemEvent.mensagem);
        MensagemAdapter adapter = new MensagemAdapter(idDoCliente, mensagems, this);

        listaDeMensagens.setAdapter(adapter);
    }

    @Subscribe
    public void ouvirMensagem(MensagemEvent mensagemEvent){

        Call<Mensagem> call = chatService.ouvirMensagens();
        call.enqueue(new OuvirMensagensCallback(eventBus, this));
    }

    @Override
    protected void onStop() {
        super.onStop();

        eventBus.unregister(this);
    }
}

Opa Guilherme,

Pode postar a MensagemAdapter?

Abraços!

Aqui a classe MensagemAdapter:

public class MensagemAdapter extends BaseAdapter {

    private List<Mensagem> mensagens;
    private Activity activity;
    private int idDoCliente;

    @BindView(R.id.tv_texto)
    public TextView texto;
    @BindView(R.id.iv_avatar_mensagem)
    public ImageView avatar;

    public MensagemAdapter(int idDoCliente, List<Mensagem> mensagens, Activity activity){
        this.mensagens = mensagens;
        this.activity = activity;
        this.idDoCliente = idDoCliente;
    }

    @Override
    public int getCount() {
        return mensagens.size();
    }

    @Override
    public Mensagem getItem(int i) {
        return mensagens.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup){

        View linha = activity.getLayoutInflater().inflate(R.layout.mensagem, viewGroup, false);

        ButterKnife.bind(this, linha);

        Mensagem mensagens = getItem(i);

        int idDoCliente = mensagens.getId();

        if (idDoCliente != mensagens.getId()){
            linha.setBackgroundColor(Color.CYAN);
        }

        texto.setText(mensagens.getText());

        Picasso.with(activity).load("https://api.adorable.io/avatars/285/" + idDoCliente + ".png").into(avatar);

        return linha;
    }
}
solução!

Já conciguir resouver este problema era a classe MensagemEvent estava faltando o this.mensagem = mensagem;

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