java.lang.NullPointerException: 无法为 child() 中的参数 'pathString' 传递 null 此错误显示
java.lang.NullPointerException: Can't pass null for argument 'pathString' in child() this error is showing
我遇到了这个错误,每次说完这样的话应用程序都会崩溃
java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
and
我的消息适配器看起来像这样 我在 .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 lOOKS 文件看起来像这样
{"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
}
}
}
}
请查看代码并帮助我解决这个问题。
谢谢
调用child()
方法时显然发生错误:
FirebaseDatabase.getInstance().getReference().child(...)
检查您传递给此方法的所有那些调用和参数。从你的代码中我看到你正在传递 senderRoom
、receiverRoom
、message.getMessageId()
,其中一些参数可以是 null
。您可以在调用 child()
方法之前添加一些检查,例如:
if (senderRoom != null && message.getMessageId() != null) {
FirebaseDatabase.getInstance().getReference()
.child("chats")
.child(senderRoom)
.child("messages")
.child(message.getMessageId()).setValue(message);
}
我遇到了这个错误,每次说完这样的话应用程序都会崩溃
java.lang.NullPointerException: Can't pass null for argument 'pathString' in child() and
我的消息适配器看起来像这样 我在 .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 lOOKS 文件看起来像这样
{"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
}
}
}
}
请查看代码并帮助我解决这个问题。 谢谢
调用child()
方法时显然发生错误:
FirebaseDatabase.getInstance().getReference().child(...)
检查您传递给此方法的所有那些调用和参数。从你的代码中我看到你正在传递 senderRoom
、receiverRoom
、message.getMessageId()
,其中一些参数可以是 null
。您可以在调用 child()
方法之前添加一些检查,例如:
if (senderRoom != null && message.getMessageId() != null) {
FirebaseDatabase.getInstance().getReference()
.child("chats")
.child(senderRoom)
.child("messages")
.child(message.getMessageId()).setValue(message);
}