我正在尝试使用 firebase 进行聊天,但我遇到了以下错误:
java.lang.NullPointerException: 尝试调用虚方法 空对象上的 'boolean java.lang.String.equals(java.lang.Object)' 参考于 com.example.javalearn.Fragment.ChatFragment$2.onBindViewHolder(ChatFragment.java:99) 在 com.example.javalearn.Fragment.ChatFragment$2.onBindViewHolder(ChatFragment.java:96)
错误发生在以下几行:
if(model.getUserID().equals(mUser.getUid()))
FirebaseRecyclerAdapter<Chat, ChatMyViewHolder> adapter = new FirebaseRecyclerAdapter<Chat, ChatMyViewHolder>(options)
我试图修复此代码,但我还有另一个问题:我发送的消息出现在左侧,其他用户的消息应该出现在此处,而不是我的。
if (model.getUserID() != null && model.getUserID().equals(mUser.getUid()))
消息下载方法:
private void LoadMessage() {
FirebaseRecyclerOptions<Chat> options = new FirebaseRecyclerOptions.Builder<Chat>().setQuery(messageRef.child(mUser.getUid()).child(OtherUserId), Chat.class).build();
FirebaseRecyclerAdapter<Chat, ChatMyViewHolder> adapter = new FirebaseRecyclerAdapter<Chat, ChatMyViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull ChatMyViewHolder holder, int position, @NonNull Chat model) {
if(model.getUserID().equals(mUser.getUid())){
holder.friendProfilePic.setVisibility(View.GONE);
holder.friendMessage.setVisibility(View.GONE);
holder.myProfilePic.setVisibility(View.VISIBLE);
holder.myMessage.setVisibility(View.VISIBLE);
holder.myMessage.setText(model.getMessage());
} else {
holder.friendProfilePic.setVisibility(View.VISIBLE);
holder.friendMessage.setVisibility(View.VISIBLE);
holder.myProfilePic.setVisibility(View.GONE);
holder.myMessage.setVisibility(View.GONE);
holder.friendMessage.setText(model.getMessage());
Picasso.get().load(OtherUserImageUrl).placeholder(R.drawable.ic_baseline_person_24).into(holder.friendProfilePic);
}
}
@NonNull
@Override
public ChatMyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_messagetext, parent, false);
return new ChatMyViewHolder(view);
}
};
adapter.startListening();
messageRecycleView.setAdapter(adapter);
}
聊天类:
public class Chat {
public String message, status, userID;
public Chat(){
}
public Chat(String message, String status, String userID) {
this.message = message;
this.status = status;
this.userID = userID;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
}
ViewHolder 聊天:
public class ChatMyViewHolder extends RecyclerView.ViewHolder {
public CircleImageView friendProfilePic, myProfilePic;
public TextView friendMessage, myMessage;
public ChatMyViewHolder(@NonNull View itemView) {
super(itemView);
friendProfilePic = itemView.findViewById(R.id.friendMessageProfileImageCiv);
myProfilePic = itemView.findViewById(R.id.yourMessageProfileImageCiv);
friendMessage = itemView.findViewById(R.id.friendMessageTv);
myMessage = itemView.findViewById(R.id.yourMessageTv);
}
}
listitem_messagetext.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/friendMessageProfileImageCiv"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/ic_baseline_person_24" />
<TextView
android:id="@+id/friendMessageTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/bg_message_item"
android:padding="8dp"
android:text="This is text"
android:textColor="@color/black"
android:textSize="16dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="horizontal"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/yourMessageTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/bg_message_item"
android:padding="8dp"
android:text="This is text"
android:textColor="@color/black"
android:textSize="16dp" />
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/yourMessageProfileImageCiv"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/ic_baseline_person_24" />
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
这就是你想要的输出方式吗?
如果是,这里是您的布局 listitem_messagetext.xml 的更改代码。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/friendMessageProfileImageCiv"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/flower" />
<TextView
android:id="@+id/friendMessageTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="8dp"
android:text="This is text"
android:textColor="@color/black"
android:textSize="16dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="horizontal"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/yourMessageTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="8dp"
android:text="This is text"
android:textColor="@color/black"
android:textSize="16dp" />
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/yourMessageProfileImageCiv"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/flower" />
</LinearLayout>