在我的聊天应用程序中,我有以下错误java.lang.NullPointerException
我正在制作聊天应用程序。。当我点击任何用户开始与他聊天时,我就遇到了这个问题。但当我第一次进入聊天室并发送第一条消息时,它已被发送“在我的firebase中,我看到了”,但当我试图再次获取聊天室时,会发生此错误在我的聊天应用程序中,我有以下错误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
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;
}