[英]How to compare two dates in Android
我在 android 工作室中使用 firebase 創建了一個聊天應用程序,我的所有活動都正常工作,期待我的日期顯示,
如果日期相同,我想立即設置日期,否則如果與上一個日期不同,則顯示新日期,我試圖設置但它顯示一些錯誤
Process: com.example.registration, PID: 13007
java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
at java.util.ArrayList.get(ArrayList.java:439)
at com.example.registration.myadapter.onBindViewHolder(myadapter.java:49)
at com.example.registration.myadapter.onBindViewHolder(myadapter.java:19)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
這是錯誤
我獲取當前日期
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String currentDate = sdf.format(new Date());
然后使用 Button.OnclickListner 將其提供給 chat.java
sendmsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String textmsg=inputmsg.getText().toString();
if(!textmsg.equals("")){
sendmessage(firebaseUser.getUid(),userref,textmsg,currentDate,currenttime);
}
else{
Toast.makeText(chatscreen.this, "ENTER SOMETHING TO SEND MESSAGE", Toast.LENGTH_SHORT).show();
}
inputmsg.setText("");
}
});
這是我的適配器
@Override
public void onBindViewHolder(@NonNull @NotNull myadapter.ViewHolder holder, int position) {
Chat name=values.get(position);
Chat pname=values.get(position - 1);//line 49
holder.txtmsg.setText(name.getMessage());
// holder.date.setText(name.getDate());
if(!name.getDate().equals(pname.getDate())) {
holder.time.setText(name.getTime());
}
else{
holder.date.setVisibility(View.INVISIBLE);
}
if(position==values.size()-1){
if(name.getIsseen()){
holder.textseen.setText("SEEN");
}
else{
holder.textseen.setText("DELIVERED");
}
}
}
@Override
public int getItemCount() {
return values.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView txtmsg;
public TextView date;
public TextView time;
public TextView textseen;
public View log;
public ViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
txtmsg=(TextView) itemView.findViewById(R.id.usermsg);
date=(TextView) itemView.findViewById(R.id.date);
time=(TextView) itemView.findViewById(R.id.time);
textseen=(TextView) itemView.findViewById(R.id.isseen);
}
}
有人知道怎么修這個東西嗎?
對於RecyclerView
中的第一項, position
將為0
這使得position - 1 = -1
這是一個無效索引,因此異常,在onBindViewHolder
檢查 Z4757FE07FD492A8BE60EA6A760D63 之前的-1
position > 0
@Override
public void onBindViewHolder(@NonNull @NotNull myadapter.ViewHolder holder, int position) {
Chat name=values.get(position);
holder.txtmsg.setText(name.getMessage());
if(position > 0)
Chat pname=values.get(position - 1);
if(!name.getDate().equals(pname.getDate())) {
holder.time.setText(name.getTime());
}else{
holder.date.setVisibility(View.INVISIBLE);
}
}
if(position==values.size()-1){
if(name.getIsseen()){
holder.textseen.setText("SEEN");
}else{
holder.textseen.setText("DELIVERED");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.