我的代码java.lang.NullPointerException中有错误:';布尔值java.lang.String.equals(java.lang.Object)';关于空对象引用
这是我的错误代码我的代码java.lang.NullPointerException中有错误:';布尔值java.lang.String.equals(java.lang.Object)';关于空对象引用,java,android,firebase,nullpointerexception,Java,Android,Firebase,Nullpointerexception,这是我的错误代码 private void readMessage() { chatList = new ArrayList<>(); DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats"); dbRef.addValueEventListener(new ValueEventListener() {
private void readMessage() {
chatList = new ArrayList<>();
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
chatList.clear();
for (DataSnapshot ds: snapshot.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);
}
//adapter
adapterChat = new AdapterChat(ChatActivity.this, chatList, hisImage);
adapterChat.notifyDataSetChanged();
//set adapter to recylerview
recyclerView.setAdapter(adapterChat);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
这是AdapterChat.java
public class AdapterChat extends RecyclerView.Adapter<AdapterChat.MyHolder>{
private static final int MSG_TYPE_LEFT = 0;
private static final int MSG_TYPE_RIGHT = 1;
Context context;
List<ModelChat> chatList;
String imageUrl;
FirebaseUser fUser;
public AdapterChat(Context context, List<ModelChat> chatList, String imageUrl) {
this.context = context;
this.chatList = chatList;
this.imageUrl = imageUrl;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//inflate layout: row_chat_left.xml for receiver, row_chat_right.xml for sender
if (viewType == MSG_TYPE_RIGHT){
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_right, parent, false);
return new MyHolder(view);
}
else {
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_left, parent, false);
return new MyHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
//get data
String message = chatList.get(position).getMessage();
String timeStamp = chatList.get(position).getTimestamp();
//convert timestamp to dd/mm/yyyy hh:mm am/pm
Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
calendar.setTimeInMillis(Long.parseLong(timeStamp));
String dateTime = DateFormat.format("dd/MM/yyyy hh:mm aa", calendar).toString();
//set data
holder.messageTv.setText(message);
holder.timeTv.setText(dateTime);
try {
Picasso.get().load(imageUrl).into(holder.profileIv);
}
catch (Exception e){
}
//set seen/delivered status of message
if (position == chatList.size()-1){
if (chatList.get(position).isSeen()){
holder.isSeenTv.setText("Seen");
}
else {
holder.isSeenTv.setText("Delivered");
}
}
else {
holder.isSeenTv.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return chatList.size();
}
@Override
public int getItemViewType(int position) {
//get currently signed in user
fUser = FirebaseAuth.getInstance().getCurrentUser();
if (chatList.get(position).getSender().equals(fUser.getUid())){
return MSG_TYPE_RIGHT;
}
else {
return MSG_TYPE_LEFT;
}
}
//view holder class
class MyHolder extends RecyclerView.ViewHolder{
//views
ImageView profileIv;
TextView messageTv, timeTv, isSeenTv;
public MyHolder(@NonNull View itemView) {
super(itemView);
//init views
profileIv = itemView.findViewById(R.id.profile_IV_chat_left);
messageTv = itemView.findViewById(R.id.message_Tv);
timeTv = itemView.findViewById(R.id.time_Tv);
isSeenTv = itemView.findViewById(R.id.is_Seen_Tv);
}
}
}
谢谢您的myUid未设置值。方法checkUserStatus在onStart()中调用,但readMessage()在onCreate()中调用。Lyfecycle活动omCreate()->onStart()->onResume()等。在调用readMessage()之前,需要在onCreate()中使用init变量 例如:
checkUserStatus();
readMessage();
请发布完整的错误报告。很难说NPE发生在什么地方。请在代码中提到出现异常的那一行。
public class AdapterChat extends RecyclerView.Adapter<AdapterChat.MyHolder>{
private static final int MSG_TYPE_LEFT = 0;
private static final int MSG_TYPE_RIGHT = 1;
Context context;
List<ModelChat> chatList;
String imageUrl;
FirebaseUser fUser;
public AdapterChat(Context context, List<ModelChat> chatList, String imageUrl) {
this.context = context;
this.chatList = chatList;
this.imageUrl = imageUrl;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//inflate layout: row_chat_left.xml for receiver, row_chat_right.xml for sender
if (viewType == MSG_TYPE_RIGHT){
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_right, parent, false);
return new MyHolder(view);
}
else {
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_left, parent, false);
return new MyHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
//get data
String message = chatList.get(position).getMessage();
String timeStamp = chatList.get(position).getTimestamp();
//convert timestamp to dd/mm/yyyy hh:mm am/pm
Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
calendar.setTimeInMillis(Long.parseLong(timeStamp));
String dateTime = DateFormat.format("dd/MM/yyyy hh:mm aa", calendar).toString();
//set data
holder.messageTv.setText(message);
holder.timeTv.setText(dateTime);
try {
Picasso.get().load(imageUrl).into(holder.profileIv);
}
catch (Exception e){
}
//set seen/delivered status of message
if (position == chatList.size()-1){
if (chatList.get(position).isSeen()){
holder.isSeenTv.setText("Seen");
}
else {
holder.isSeenTv.setText("Delivered");
}
}
else {
holder.isSeenTv.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return chatList.size();
}
@Override
public int getItemViewType(int position) {
//get currently signed in user
fUser = FirebaseAuth.getInstance().getCurrentUser();
if (chatList.get(position).getSender().equals(fUser.getUid())){
return MSG_TYPE_RIGHT;
}
else {
return MSG_TYPE_LEFT;
}
}
//view holder class
class MyHolder extends RecyclerView.ViewHolder{
//views
ImageView profileIv;
TextView messageTv, timeTv, isSeenTv;
public MyHolder(@NonNull View itemView) {
super(itemView);
//init views
profileIv = itemView.findViewById(R.id.profile_IV_chat_left);
messageTv = itemView.findViewById(R.id.message_Tv);
timeTv = itemView.findViewById(R.id.time_Tv);
isSeenTv = itemView.findViewById(R.id.is_Seen_Tv);
}
}
}
if (chat.getReceiver().equals(myUid) && chat.getSender().equals(hisUid) ||
chat.getReceiver().equals(hisUid) && chat.getSender().equals(myUid)){
chatList.add(chat);
checkUserStatus();
readMessage();