Почему говорит что обьект пустой, если информация в бд добавляется с него (Attempt to invoke virtual method on a null object reference)?

Есть 3 класса Чат онлайн где идет добавление сообщения и логина пользователя в бд, чат адаптер, и МоделЧат это конструктор с гетерами и сеттерами.

Подскажите почему мне выдает Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference. Я не понимаю почему оно говорит что объект пустой, если в базе значения есть и они добавляются. Класс чат онлайн кидать не буду я в нем уверен, ошибка в классе чат адаптер в этой строке (String loginChat = model.getLoginChat().toString() ;), но что я не так делаю я не понимаю. Чат адаптер

public class ChatAdapter extends RecyclerView.Adapter<ViewHolderMesssages> {


public ArrayList<String> messages;
public String loginChat;
public LayoutInflater inflater;
public ChatModel model;

public ChatAdapter(Context context, ArrayList<String> messages, String loginChat,ChatModel model) {
    this.messages = messages;
    this.inflater = LayoutInflater.from(context);
    this.loginChat = loginChat;
    this.model = model;
}


@NonNull
@Override
public ViewHolderMesssages onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.item_messsage,parent,false);
    return new ViewHolderMesssages(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolderMesssages holder, int position) {
   

    String loginChat = model.getLoginChat().toString() ;
    holder.loginChat.setText(loginChat);

    String msg = messages.get(position);
    holder.message.setText(msg);
    
}
@Override
public int getItemCount() {
    return messages.size();
}

} ЧатМодел

public class ChatModel {
public String message;
public String loginChat;
public long messageTime;

public ChatModel () {}

public ChatModel(String message, String loginChat) {

    this.message = message;
    this.loginChat = loginChat;
    this.messageTime = new Date().getTime();
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getLoginChat() {
    return loginChat;
}

public void setLoginChat(String loginChat) {
    this.loginChat = loginChat;
}

public long getMessageTime() {
    return messageTime;
}

public void setMessageTime(long messageTime) {
    this.messageTime = messageTime;
}

}

ну и часть кода связаного с чатмодел и чат адаптер с чатонлайн скину, может все-таки там ошибся.

model = new ChatModel();
chatAdapter = new ChatAdapter(this,messages,loginUser,model);
recyclerMessage.setAdapter(chatAdapter);

myRef.push().setValue(new ChatModel(messageUser,loginUser));
refUsers.child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
loginUser = snapshot.child("login").getValue().toString();
urlImageUser = snapshot.child("urlImage").getValue().toString();
}

Подскажите, почему объект пустой то, долго уже сижу столько вариантов перепробовал уже и все время пишет что он пустой.


Ответы (1 шт):

Автор решения: Дмитрий

Исходя из описания проблемы (пример не воспроизводимый), прихожу к следующему выводу... Рассмотрим строку, из которой выбрысывается исключение.

String loginChat = model.getLoginChat().toString()  

В этой строке, судя по всему, объект model действительно не равен null (вы уверили в этом в опросе). Тогда проблема не в самом объекте, а в поле loginChat. Все дело в том, что указанное вами исключение выбрасывается в том случае, если вы вызываете метод у неинициализированного (null) объекта. В этой строке кода методов вы вызываете всего два:

  1. вызов метода getLoginChat() у объекта model (мы знаем, что он не null);
  2. вызов метода toString() у поля loginChat. Подзреваю, что именно оно не проинциализированно (null) и именно этот вызов выбрасывает вам исключение.

Рещение довольно простое : вызов метода toString() излишний, ведь ваше поле loginChat и так является String. Вопрос только в том, ожидаемое ли это поведение... Но это уже другой вопрос

→ Ссылка