如何修复以下错误:在空对象引用上?

问题描述 投票:0回答:1

我正在尝试使用 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()))

How does it look

How it should look

消息下载方法:

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>
java android firebase firebase-realtime-database android-recyclerview
1个回答
0
投票

这就是你想要的输出方式吗?

如果是,这里是您的布局 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>
© www.soinside.com 2019 - 2024. All rights reserved.