在我的聊天应用程序中,我有以下错误java.lang.NullPointerException

在我的聊天应用程序中,我有以下错误java.lang.NullPointerException,java,android,Java,Android,我正在制作聊天应用程序。。当我点击任何用户开始与他聊天时,我就遇到了这个问题。但当我第一次进入聊天室并发送第一条消息时,它已被发送“在我的firebase中,我看到了”,但当我试图再次获取聊天室时,会发生此错误 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object refere

我正在制作聊天应用程序。。当我点击任何用户开始与他聊天时,我就遇到了这个问题。但当我第一次进入聊天室并发送第一条消息时,它已被发送“在我的firebase中,我看到了”,但当我试图再次获取聊天室时,会发生此错误

    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at com.example.learno.SocialApp.ChatActivity$4.onDataChange(ChatActivity.java:157)
这是我的代码

public class ChatActivity extends AppCompatActivity {
Toolbar toolbar;
RecyclerView recyclerView;
ImageView profileTv;
TextView nameTv, userStatusTv;
EditText messageEt;
ImageButton sendBtn;
FirebaseAuth firebaseAuth;
FirebaseDatabase firebaseDatabase;
DatabaseReference usersDbRef;

ValueEventListener seenListener;
DatabaseReference userRefForSeen;

List<Modelchat> chatList;
AdapterChat adapterChat;

String hisUid;
String myUid;
String hisImage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setTitle("");
    recyclerView = findViewById(R.id.chat_RecylerView);
    profileTv = findViewById(R.id.profileTv);
    nameTv = findViewById(R.id.nameTv);
    userStatusTv = findViewById(R.id.userStatusTv);
    messageEt = findViewById(R.id.massageEt);
    sendBtn = findViewById(R.id.sendBtn);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setStackFromEnd(true);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(linearLayoutManager);

    Intent intent = getIntent();
    hisUid = intent.getStringExtra("hisUid");

    firebaseAuth = FirebaseAuth.getInstance();

    firebaseDatabase = FirebaseDatabase.getInstance();

    usersDbRef = firebaseDatabase.getReference("Users");

    Query userQuery = usersDbRef.orderByChild("uid").equalTo(hisUid);

    userQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String name = "" + ds.child("name").getValue();
                hisImage = "" + ds.child("image").getValue();

                nameTv.setText(name);
                try {
                    Picasso.get().load(hisImage).placeholder(R.drawable.ic_defult_img_face).into(profileTv);
                } catch (Exception e) {
                    Picasso.get().load(R.drawable.ic_defult_img_face).into(profileTv);
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    sendBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String message = messageEt.getText().toString().trim();
            if (TextUtils.isEmpty(message)) {
                Toast.makeText(ChatActivity.this, "Cannot send empty message...", Toast.LENGTH_SHORT).show();
            } else {
                sendMessage(message);
            }
        }
    });
    readMessages();
    seenMessages();
}

private void seenMessages() {
    userRefForSeen = FirebaseDatabase.getInstance().getReference("Chats");
    seenListener = userRefForSeen.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds: dataSnapshot.getChildren()) {
                Modelchat chat = ds.getValue(Modelchat.class);
                if (chat.getReceiver().equals(myUid) && chat.getSender().equals(hisUid)) {
                    HashMap<String, Object> hasSeenHashMap = new HashMap<>();
                    hasSeenHashMap.put("isSeen", true);
                    ds.getRef().updateChildren(hasSeenHashMap);
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

private void readMessages() {
    chatList = new ArrayList<>();
    DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            chatList.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                Modelchat chat = ds.getValue(Modelchat.class);
                if (chat.getReceiver().equals(myUid) && chat.getSender().equals(hisUid) ||
                        chat.getReceiver().equals(hisUid) && chat.getSender().equals(myUid)) {
                    chatList.add(chat);
                }
                adapterChat = new

                        AdapterChat(ChatActivity.this, chatList, hisImage);
                adapterChat.notifyDataSetChanged();
                recyclerView.setAdapter(adapterChat);
            }
        }


        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}


private void sendMessage(String message) {


    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

    String timeStamp = String.valueOf(System.currentTimeMillis());

    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("Sender", myUid);
    hashMap.put("receiver", hisUid);
    hashMap.put("message", message);
    hashMap.put("timeStamp", timeStamp);
    hashMap.put("isSeen", false);

    databaseReference.child("Chats").push().setValue(hashMap);

    messageEt.setText("");
}

private void checkuserstatus() {
    FirebaseUser user = firebaseAuth.getCurrentUser();
    if (user != null) {
        myUid = user.getUid();
    } else {
        startActivity(new Intent(this, Register.class));
        finish();
    }
}

@Override
protected void onStart() {
    checkuserstatus();
    super.onStart();
}

@Override
protected void onPause() {
    super.onPause();
    userRefForSeen.removeEventListener(seenListener);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_logout, menu);
    menu.findItem(R.id.actiob_search).setVisible(false);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.logout) ;
    {
        firebaseAuth.signOut();
        checkuserstatus();
    }

    return super.onOptionsItemSelected(item);
}
因此,当我进入我的用户片段并点击任何用户开始与他聊天时,就会发生此错误。。
有人能帮我吗?

在你的代码
聊天中。getReceiver()
聊天。getSender()
返回
null
值,你有很多调用,比如
chat.getReceiver().equals(myUid)
聊天。getSender().equals(hisUid)
,所有这些调用都可以生成
NullPointerException

因此,请更正
getReceiver()
getSender()
代码,并确保它们在调用
equals
之前不会返回
null
值或检查
null

或者将
chat.getSender().equals(hisUid)
更改为
hisUid.equals(chat.getSender())

chat.getReceiver().equals(myUid)
myUid.equals(chat.getReceiver())
如果
hisUid
myUid
始终不为
null

请输入较少的代码,显示引发错误的行。
public class Modelchat {
String message,receiver,sender,timestamp;
boolean isSeen;

public Modelchat(){}

public Modelchat(String message, String receiver, String sender, String timestamp, boolean isSeen) {
    this.message = message;
    this.receiver = receiver;
    this.sender = sender;
    this.timestamp = timestamp;
    this.isSeen = isSeen;
}

public String getMessage() {
    return message;
}

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

public String getReceiver() {
    return receiver;
}

public void setReceiver(String receiver) {
    this.receiver = receiver;
}

public String getSender() {
    return sender;
}

public void setSender(String sender) {
    this.sender = sender;
}

public String getTimestamp() {
    return timestamp;
}

public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
}

public boolean isSeen() {
    return isSeen;
}

public void setSeen(boolean seen) {
    isSeen = seen;
}