阵列列表添加到新的回收器视图 [英] arraylist add to new recyclerview
本文介绍了阵列列表添加到新的回收器视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您好,我正在尝试将一个新项目添加到我的聊天中,我使用RXJava2调用REST API来获取聊天数据,并使用此嵌套的json响应。
但当我尝试将新项目添加到数组列表(发送新邮件)时,出现NullPointer值:
09-08 13:35:14.529 2869-2869/com.jonathan.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jonathan.myapp, PID: 2869
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.jonathan.myapp.models.ChatMessageUser.setUserId(java.lang.String)' on a null object reference
at com.jonathan.myapp.ui.activity.UserChatActivity.attemptSend(UserChatActivity.java:368)
at com.jonathan.myapp.ui.activity.UserChatActivity.access$000(UserChatActivity.java:56)
at com.jonathan.myapp.ui.activity.UserChatActivity$3.onClick(UserChatActivity.java:161)
我用来发送消息的代码是:
private ArrayList<ChatMessages> messageArrayList;
private void attemptSend() {
if (TextUtils.isEmpty(message)) {
mInputMessageView.requestFocus();
return;
}
mInputMessageView.setText("");
String userid = "1";
ChatMessages add = new ChatMessages();
add.setMessage(message);
add.setCreatedAt(1536407395);
add.getUser().setUserId(userid);
messageArrayList.add(add);
mAdapter.notifyDataSetChanged();
if (mAdapter.getItemCount() > 1) {
// scrolling to bottom of the recycler view
recyclerView.getLayoutManager().smoothScrollToPosition(recyclerView, null, mAdapter.getItemCount() - 1);
}
}
嵌套的JSON:
{
"error": false,
"messages": [
{
"message": "hej 😀",
"message_id": 15,
"created_at": 1509383626,
"readedAt": 1536331345,
"user": {
"user_id": 2,
"username": "Lasse",
"userprofilepicture": "https://static.pexels.com/photos/305239/pexels-photo-305239.jpeg"
}
},
{
"message": "hej 😡 kar",
"message_id": 24,
"created_at": 1510411308,
"readedAt": 1511165097,
"user": {
"user_id": 1,
"username": "Jonathan",
"userprofilepicture": "https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/7YWI2KZZ6N.jpg"
}
}
],
"chat_room": {
"roomId": 1,
"displayName": "Jonathan",
"displayNameImage": "https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/7YWI2KZZ6N.jpg",
"createdDate": "1532032759"
}
}
我的ChatThreadAdapter:
public class ChatRoomThreadAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private String userId;
private int SELF = 100;
private static String today;
private Context mContext;
private ArrayList<ChatMessages> messageArrayList;
public List<ChatMessages> getChatMessages(){
return messageArrayList;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView message, timestamp, readedstatus;
ImageView profileimage;
public ViewHolder(View view) {
super(view);
message = (TextView) itemView.findViewById(R.id.message);
timestamp = (TextView) itemView.findViewById(R.id.timestamp);
readedstatus = (TextView) itemView.findViewById(R.id.readedstatus);
profileimage = (ImageView) itemView.findViewById(R.id.avater_image);
}
}
public ChatRoomThreadAdapter(Context mContext, ArrayList<ChatMessages> messageArrayList, String userId) {
this.mContext = mContext;
this.messageArrayList = messageArrayList;
this.userId = userId;
Calendar calendar = Calendar.getInstance();
today = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView;
if (viewType == SELF) {
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_message_right, parent, false);
} else {
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_message_left, parent, false);
}
return new ViewHolder(itemView);
}
@Override
public int getItemViewType(int position) {
ChatMessages message = messageArrayList.get(position);
if (message.getUser().getUserId().equals(userId)) {
return SELF;
}
return position;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
ChatMessages message = messageArrayList.get(position);
String timestamp = TextUtils.getDateTimeStampWithTime(message.getCreatedAt());
String fimage = message.getUser().getUserprofilepicture();
String readedat = TextUtils.getDateTimeStampWithTime(message.getReadedAt());
if (message.getUser().getUserId().equals(userId)) {
// Self
((ViewHolder) holder).message.setText(Html.fromHtml(message.getMessage()));
if (message.getUser().getUsername() != null)
((ViewHolder) holder).timestamp.setText(timestamp);
((ViewHolder) holder).readedstatus.setVisibility(View.GONE);
((ViewHolder) holder).readedstatus.setVisibility(View.GONE);
} else {
// Other
((ViewHolder) holder).message.setText(Html.fromHtml(message.getMessage()));
if (message.getUser().getUsername() != null)
((ViewHolder) holder).timestamp.setText(timestamp);
if (fimage.isEmpty()) {
Picasso.with(mContext).load(R.drawable.ic_no_user)
.resize(80, 80)
.into(((ViewHolder) holder).profileimage);
} else {
Picasso.with(mContext).load(fimage)
.resize(80, 80)
.into(((ViewHolder) holder).profileimage);
}
if (message.getReadedAt().toString().equals("0")){
((ViewHolder) holder).readedstatus.setText(mContext.getResources().getString(R.string.message_delivered));
} else {
((ViewHolder) holder).readedstatus.setText(mContext.getResources().getString(R.string.message_readed_at) + " " + readedat);
}
}
}
@Override
public int getItemCount() {
return messageArrayList.size();
}
}
和我的型号:
public class ChatMessages {
@SerializedName("message")
@Expose
private String message;
@SerializedName("message_id")
@Expose
private Integer messageId;
@SerializedName("created_at")
@Expose
private Integer createdAt;
@SerializedName("readedAt")
@Expose
private Integer readedAt;
@SerializedName("user")
@Expose
private ChatMessageUser user;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getMessageId() {
return messageId;
}
public void setMessageId(Integer messageId) {
this.messageId = messageId;
}
public Integer getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Integer createdAt) {
this.createdAt = createdAt;
}
public Integer getReadedAt() {
return readedAt;
}
public void setReadedAt(Integer readedAt) {
this.readedAt = readedAt;
}
public ChatMessageUser getUser() {
return user;
}
public void setUser(ChatMessageUser user) {
this.user = user;
}
}
And the ChatMessageUser model:
public class ChatMessageUser {
@SerializedName("user_id")
@Expose
private String userId;
@SerializedName("username")
@Expose
private String username;
@SerializedName("userprofilepicture")
@Expose
private String userprofilepicture;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserprofilepicture() {
return userprofilepicture;
}
public void setUserprofilepicture(String userprofilepicture) {
this.userprofilepicture = userprofilepicture;
}
}
ChatMessages
实例化推荐答案对象时,该对象中的用户字段为空。
在调用add.getUser().setUserId(userid)
之前,必须调用setUser(ChatMessageUser user)
方法并将现有的User对象传递给该方法。
这篇关于阵列列表添加到新的回收器视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文