当前位置: 首页 > 知识库问答 >
问题:

如何在Android中比较两个日期

孔棋
2023-03-14

我在android studio中使用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());

然后把它交给聊天室。java使用按钮。OnclickListner

 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);

        }
    }

有人知道怎么解决这个问题吗?

共有1个答案

杨柏
2023-03-14

对于RecyclerView中的第一项,position将是0,这使得position-1=-1成为无效索引,因此在onBindViewHolder中检查position

@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");
        }
     }
}

 类似资料:
  • 问题内容: 我正在尝试比较两个日期,而我只想比较日期部分而不是时间部分,这就是我在程序中存储日期的方式: 我有一个: 我想用 但是由于还涉及时间部分,所以我无法获得正确的答案。我该如何解决我的问题? 我不想使用JODA-TIME 问题答案: 您可以像这样逐个比较价值 要么 如果您使用Date类,请考虑改用Calendar类这是最优雅的解决方案,为此使用Calendar和Comparator 用法:

  • 问题内容: 如果日期格式为和,如何在php中比较两个日期。 我正在使用此代码: 但它不起作用.. 问题答案: 您必须确保您的日期是有效的日期对象。 尝试这个: 然后,您可以执行该方法来获得差异。

  • 问题内容: 如何在PHP中比较两个日期? 在数据库中,日期看起来像2011-10-2。 如果我想将今天的日期与数据库中的日期进行比较,看哪个更大,我该怎么做? 我试过了 但这并不是真的那样。还有另一种方法吗? 更新:我知道这篇文章有点老,但是我只想提及carbon,它是与laravel一起使用的一类,但可以与经典php一起使用,并且它确实与日期有关。检查一下:碳 问题答案: 在数据库中日期看起来像

  • 问题内容: 如何使用Python比较两个日期以查看稍后的日期? 例如,我想检查当前日期是否超过了我创建的假期日期列表中的最后日期,因此它将自动发送电子邮件,告诉管理员更新holiday.txt文件。 问题答案: 使用方法和运算符及其种类。

  • 我在我的应用程序中使用moment.js,我将我的日期以特定格式传递给moment.js,它将它与系统时间进行比较,并给我漂亮的时间格式,如下所示: 这里,时间由我以指定格式作为时间戳给出。 我的问题是 fromNow() 函数采用系统日期而不是服务器日期。因此,如果用户在他的系统中使用具有5分钟延迟时间的手机,他将获得4分钟前作为最新更新的卡。 我想把我过的"时间"与服务器时间进行比较,那也将由

  • 问题内容: 我尝试通过C#的JSON解析创建标记。我在javascript中有一个关于日期时间比较的小问题。 否则不起作用!谷歌地图上有truckOnline标记。我的错误在哪里? 和在SQL中这样的LastRecordTime格式:04.12.2013 01:03:00 问题答案: 穆罕默德 看来您打错了字: 应该是(请注意逗号): 另外,您试图从日期对象创建新的日期对象,这是不正确的: 这里是