所以每當我的適配器嘗試創建一個聊天項目它總是給人FirebaseRecyclerAdapter的popuplateViewHolder如何在沒有抓取空模型的情況下創建合適的模型類?
error: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at com.swampass.nauticalapp.ChatConversationActivity$2.populateViewHolder(ChatConversationActivity.java:178)
這是在這部分的活動:
if(mSender.equals(HomeActivity.LoggedIn_User_Email)){...}
我不知道,因爲我它爲什麼這樣做我不太瞭解它如何實際抓取類,但是當我點擊發送時,數據庫正在被消息更新。我嘗試了不同的東西,但我似乎無法找到如何解決它。
這是聊天發生:
公共類ChatConversationActivity擴展AppCompatActivity {
DatabaseReference myRef,myRef2,chatRef,userRef;
ImageView attach_icon,send_icon,no_data_available_image;
EditText message_area;
TextView no_chat;
public LinearLayoutManager mLinearLayoutManager;
static String Sender_Name;
public RecyclerView recyclerView;
//ChatItemAdapter adapter;
ArrayList<ChatMessage> msgs;
private FirebaseRecyclerAdapter<ChatMessage,ViewHolder> mUserMsg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat_conversation);
final String USER_ID = HomeActivity.LoggedIn_User_Email.replace("@","").replace(".","");
String email= getIntent().getStringExtra("descripion").replace("@","").replace(".","");
myRef = FirebaseDatabase.getInstance().getReference().child("Chat").child(USER_ID).child(email);
myRef.keepSynced(true);
//Log.d("LOGGED", "myRef : " + myRef);
myRef2 = FirebaseDatabase.getInstance().getReference().child("Chat").child(getIntent().getStringExtra("descripion").replace("@","").replace(".","")).child(USER_ID);
myRef2.keepSynced(true);
chatRef = FirebaseDatabase.getInstance().getReference().child("Chat");
userRef = FirebaseDatabase.getInstance().getReference().child("Users");
//Log.d("LOGGED", "myRef2 : " + myRef2);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(getIntent().getStringExtra("name") + "</font>");
}
Sender_Name = getIntent().getStringExtra("name");
attach_icon = (ImageView)findViewById(R.id.attachButton);
send_icon = (ImageView)findViewById(R.id.sendButton);
no_data_available_image = (ImageView)findViewById(R.id.no_data_available_image);
message_area = (EditText)findViewById(R.id.messageArea);
no_chat = (TextView)findViewById(R.id.no_chat_text);
msgs= new ArrayList<>();
//adapter = new ChatItemAdapter(msgs,this,myRef2);
recyclerView = (RecyclerView)findViewById(R.id.chat_recycler_view);
mLinearLayoutManager = new LinearLayoutManager(ChatConversationActivity.this);
recyclerView.setLayoutManager(mLinearLayoutManager);
mLinearLayoutManager.setStackFromEnd(true);
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
send_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String messageText = message_area.getText().toString().trim();
if(!messageText.equals("")){
//Date dick = DateFormat.getDateInstance().getCalendar().getTime();
ChatMessage msg = new ChatMessage(messageText, USER_ID);
final DatabaseReference pushRef = chatRef.push();
final String pushKey = pushRef.getKey();
// ArrayMap<String, String> map = new ArrayMap<>();
// map.put("message", messageText);
// map.put("sender", HomeActivity.LoggedIn_User_Email);
//myRef.push().setValue(map);
// myRef2.push().setValue(map);
HashMap<String, Object> messageItemMap = new HashMap<String, Object>();
HashMap<String,Object> messageObj = (HashMap<String, Object>) new ObjectMapper().convertValue(msg, Map.class);
messageItemMap.put(pushKey, messageObj);
chatRef.push().setValue(messageItemMap);
msgs.add(msg);
message_area.setText("");
}
}
});
mUserMsg = new FirebaseRecyclerAdapter<ChatMessage, ViewHolder>(ChatMessage.class,R.layout.chat_item,ViewHolder.class,chatRef.getRef()) {
@Override
protected void populateViewHolder(ViewHolder view, ChatMessage message, int position) {
LinearLayout messageLine = view.layout;
TextView messgaeText = view.message;
TextView senderText = view.sender;
//TextView timeTextView = (TextView) view.findViewById(R.id.timeTextView);
final ImageView leftImage = view.leftPic;
final ImageView rightImage = view.rightPic;
LinearLayout individMessageLayout = view.messageLayout;
//set message and sender text
messgaeText.setText(message.getMessageText());
senderText.setText(message.getUserID());
//If you sent this message, right align
String mSender = message.getUserID();
if(mSender.equals(HomeActivity.LoggedIn_User_Email)){
//messgaeText.setGravity(Gravity.RIGHT);
//senderText.setGravity(Gravity.RIGHT);
messageLine.setGravity(Gravity.RIGHT);
leftImage.setVisibility(View.GONE);
rightImage.setVisibility(View.VISIBLE);
individMessageLayout.setBackgroundResource(R.drawable.incoming_msg);
//messgaeText.setBackgroundColor(ResourcesCompat.getColor(getResources(),
// R.color.colorAccent, null));
}else if(mSender.equals("System")){
messageLine.setGravity(Gravity.CENTER_HORIZONTAL);
leftImage.setVisibility(View.GONE);
rightImage.setVisibility(View.GONE);
}else{
//messgaeText.setGravity(Gravity.LEFT);
//senderText.setGravity(Gravity.LEFT);
messageLine.setGravity(Gravity.LEFT);
leftImage.setVisibility(View.VISIBLE);
rightImage.setVisibility(View.GONE);
individMessageLayout.setBackgroundResource(R.drawable.round_corners);
//messgaeText.setBackgroundColor(ResourcesCompat.getColor(getResources(),
// R.color.colorPrimary, null));
}
}
};
recyclerView.setAdapter(mUserMsg);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView message, sender;
private final ImageView leftPic,rightPic;
private final LinearLayout.LayoutParams params, text_params;
LinearLayout layout,messageLayout;
public ViewHolder(final View itemView) {
super(itemView);
message = (TextView) itemView.findViewById(R.id.messageTextView);
sender = (TextView) itemView.findViewById(R.id.senderTextView);
//date = (TextView) itemView.findViewById(R.id.date_txt);
text_params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);;
layout = (LinearLayout) itemView.findViewById(R.id.messageLine);
leftPic = (ImageView) itemView.findViewById(R.id.leftMessagePic);
rightPic = (ImageView) itemView.findViewById(R.id.rightMessagePic);
messageLayout = (LinearLayout)itemView.findViewById(R.id.individMessageLayout);
}
}
}
這是我的聊天消息模型:
package com.swampass.nauticalapp.model;
import java.util.Date;
public class ChatMessage {
private String messageText;
private String userID;
// private Date date;
public ChatMessage()
{
}
//plain text message
public ChatMessage(String messageText, String userID) {
this.messageText = messageText;
this.userID = userID;
}
public String getUserID() {return userID;}
public void setMessageText(String messageText) {this.messageText = messageText;}
public String getMessageText() { return messageText;}
}