【发布时间】:2022-01-05 19:18:48
【问题描述】:
我收到此错误,并且每次说出这样的话后应用程序都会崩溃
java.lang.NullPointerException:不能在 child() 中为参数“pathString”传递 null 和
我的消息适配器看起来像这样,我在 .child(senderRoom) 行中遇到错误,应用程序正在崩溃
public class MessagesAdapter extends RecyclerView.Adapter {
Context context;
ArrayList<Message> messages;
final int ITEM_SENT = 1;
final int ITEM_RECEIVE = 2;
String senderRoom;
String receiverRoom;
public MessagesAdapter(Context context, ArrayList<Message> messages, String senderRoom, String receiverRoom) {
this.context = context;
this.messages = messages;
this.senderRoom = senderRoom;
this.receiverRoom = receiverRoom;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType==ITEM_SENT)
{
View view = LayoutInflater.from(context).inflate(R.layout.item_send, parent, false);
return new SentViewHolder(view);
}else
{
View view = LayoutInflater.from(context).inflate(R.layout.item_receive, parent, false);
return new ReceiverViewHolder(view);
}
}
@Override
public int getItemViewType(int position) {
Message message = messages.get(position);
if (FirebaseAuth.getInstance().getUid().equals(message.getSenderId()))
{
return ITEM_SENT;
}else {
return ITEM_RECEIVE;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
Message message = messages.get(position);
int [] reactions = new int[]{
R.drawable.ic_fb_like,
R.drawable.ic_fb_love,
R.drawable.ic_fb_laugh,
R.drawable.ic_fb_wow,
R.drawable.ic_fb_sad,
R.drawable.ic_fb_angry
};
ReactionsConfig config = new ReactionsConfigBuilder(context)
.withReactions(reactions)
.build();
ReactionPopup popup = new ReactionPopup(context, config, (pos) -> {
if (holder.getClass() == SentViewHolder.class)
{
SentViewHolder viewHolder = (SentViewHolder) holder;
viewHolder.binding.feeling.setImageResource(reactions[pos]);
viewHolder.binding.feeling.setVisibility(View.VISIBLE);
}else
{
ReceiverViewHolder viewHolder = (ReceiverViewHolder) holder;
viewHolder.binding.feeling.setImageResource(reactions[pos]);
viewHolder.binding.feeling.setVisibility(View.VISIBLE);
}
message.setFeeling(pos);
FirebaseDatabase.getInstance().getReference()
.child("chats")
.child(senderRoom)
.child("messages")
.child(message.getMessageId()).setValue(message);
FirebaseDatabase.getInstance().getReference()
.child("chats")
.child(receiverRoom)
.child("messages")
.child(message.getMessageId()).setValue(message);
return true; // true is closing popup, false is requesting a new selection
});
if (holder.getClass() == SentViewHolder.class)
{
SentViewHolder viewHolder = (SentViewHolder) holder;
viewHolder.binding.message.setText(message.getMessage());
if (message.getFeeling() >= 0)
{
//message.setFeeling(reactions[message.getFeeling()]);
viewHolder.binding.feeling.setImageResource(reactions[message.getFeeling()]);
viewHolder.binding.feeling.setVisibility(View.VISIBLE);
}else {
viewHolder.binding.feeling.setVisibility(View.GONE);
}
viewHolder.binding.message.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
popup.onTouch(view, motionEvent);
return false;
}
});
}else {
ReceiverViewHolder viewHolder = (ReceiverViewHolder) holder;
viewHolder.binding.message.setText(message.getMessage());
if (message.getFeeling() >= 0)
{
//message.setFeeling(reactions[(int)message.getFeeling()]);
viewHolder.binding.feeling.setImageResource(reactions[message.getFeeling()]);
viewHolder.binding.feeling.setVisibility(View.VISIBLE);
}else {
viewHolder.binding.feeling.setVisibility(View.GONE);
}
viewHolder.binding.message.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
popup.onTouch(view, motionEvent);
return false;
}
});
}
}
@Override
public int getItemCount() {
return messages.size();
}
public class SentViewHolder extends RecyclerView.ViewHolder
{
ItemSendBinding binding;
public SentViewHolder(@NonNull View itemView) {
super(itemView);
binding = ItemSendBinding.bind(itemView);
}
}
public class ReceiverViewHolder extends RecyclerView.ViewHolder
{
ItemReceiveBinding binding;
public ReceiverViewHolder(@NonNull View itemView) {
super(itemView);
binding = ItemReceiveBinding.bind(itemView);
}
}}
我的 JSON 文件看起来像这样
{"chats" : {
"3GJBWzyjbVfAJQkhMIFzrr2KG2L23GJBWzyjbVfAJQkhMIFzrr2KG2L2" : {
"messages" : {
"-MsfcZFGlN1moVhnY9eJ" : {
"feeling" : -1,
"message" : "hey",
"senderId" : "3GJBWzyjbVfAJQkhMIFzrr2KG2L2",
"timeStamp" : 0
}
}
},
"3GJBWzyjbVfAJQkhMIFzrr2KG2L27JyFKNV0k6e4cwM8zNOb1coANfg1" : {
"messages" : {
"-MsfatS61jbf5ZPZIcPi" : {
"feeling" : -1,
"message" : "om swami",
"senderId" : "3GJBWzyjbVfAJQkhMIFzrr2KG2L2",
"timeStamp" : 0
}
}
},
"7JyFKNV0k6e4cwM8zNOb1coANfg13GJBWzyjbVfAJQkhMIFzrr2KG2L2" : {
"messages" : {
"-MsfatS61jbf5ZPZIcPi" : {
"feeling" : -1,
"message" : "om swami",
"senderId" : "3GJBWzyjbVfAJQkhMIFzrr2KG2L2",
"timeStamp" : 0
}
}
}
}
请查看代码并帮助我解决此问题。 谢谢
【问题讨论】:
标签: java android firebase firebase-realtime-database