Android 文本视图中显示空日期时间差

Android 文本视图中显示空日期时间差,android,datetime,Android,Datetime,在我的应用程序中,我正在计算日期时间差。在firebase中插入节点时,我保存创建节点的当前时间。在适配器中,我希望以秒、分或天的形式在cardview中显示差异。 问题是适配器中没有编译时错误。但textview中没有显示任何内容 这是我在firebase中插入节点的活动 addMovie.setOnClickListener(new View.OnClickListener() { @Override public void onClick(V

在我的应用程序中,我正在计算日期时间差。在firebase中插入节点时,我保存创建节点的当前时间。在适配器中,我希望以秒、分或天的形式在
cardview
中显示差异。
问题是适配器中没有编译时错误。但textview中没有显示任何内容

这是我在firebase中插入节点的活动

        addMovie.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());

            String title = etTitle.getText().toString();
            String desc = etDesc.getText().toString();
            String url = etUrl.getText().toString();
            String cst = etCast.getText().toString();
            savedData(title, desc, url,cst,currentDateTime);
}

    private void savedData(String title, String desc, String url,String cast,String time) {
    String key = updateId;
    if (updateId == null) {
        key = databaseReference.push().getKey();
    }

    uploadImage(selectedimg, key);
    Movie movie = new Movie(title, desc, url, key,cast,time);
    Toast.makeText(this, "movie "+movie.getCast(), Toast.LENGTH_SHORT).show();
    movieReference.child(key).setValue(movie);
    etTitle.setText("");
    etDesc.setText("");
    etUrl.setText("");
    movieImage.setImageResource(0);
    pd.dismiss();
}
这是我的适配器

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

ArrayList<Movie> movies;
movieItemListener listener;
Context context;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
DecimalFormat df;


public MyAdapter(ArrayList<Movie> movies) {
    this.movies = movies;
}

public MyAdapter(@NonNull Context context, ArrayList<Movie> movies, movieItemListener listener) {
    this.context = context;
    this.movies = movies;
    this.listener = listener;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_layout, parent, false);
    MyViewHolder viewHolder = new MyViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {


    df = new DecimalFormat("#.#");
    final Movie movie = movies.get(position);

    String currentTime = DateFormat.getDateTimeInstance().format(new Date());
    final String saveTime = movie.getCurrentDateTime();

    Toast.makeText(context, "abc"+getTimeDiff(currentTime, saveTime), Toast.LENGTH_SHORT).show();

    holder.tvDate.setText(getTimeDiff(currentTime, saveTime));

    holder.tvRatings.setText(df.format(movie.getAvgRating()));

    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = firebaseDatabase.getReference().child("movies");

    databaseReference.child(movie.getId()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            holder.tvRatings.setText(df.format(dataSnapshot.child("avgRating").getValue()));
            holder.tvViews.setText(String.valueOf(dataSnapshot.child("viewsCount").getValue()) + " Views");
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    holder.tvTitle.setText(movie.getTitle());

    holder.overflow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showPopupMenu(holder.overflow, position, movie);
        }
    });
}

private String getTimeDiff(String currentTime, String saveTime) {
    String diff="";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy hh:mm:ss");

    try {
        Date date1 = simpleDateFormat.parse(currentTime);
        Date date2 = simpleDateFormat.parse(saveTime);

        diff= printDifference(date1, date2);
        Toast.makeText(context, "in diff ", Toast.LENGTH_SHORT).show();

    } catch (ParseException e) {
        e.printStackTrace();
    }
  return diff;
}


public String printDifference(Date startDate, Date endDate) {

    long different = endDate.getTime() - startDate.getTime();

    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long daysInMilli = hoursInMilli * 24;

    long elapsedDays = different / daysInMilli;
    different = different % daysInMilli;

    long elapsedHours = different / hoursInMilli;
    different = different % hoursInMilli;

    long elapsedMinutes = different / minutesInMilli;
    different = different % minutesInMilli;

    long elapsedSeconds = different / secondsInMilli;

    String days=String.valueOf(elapsedDays);
    String hours=String.valueOf(elapsedHours);
    String minutes=String.valueOf(elapsedMinutes);
    String seconds=String.valueOf(elapsedSeconds);

 /*  if(elapsedSeconds>59)
       return minutes;
    else if(elapsedMinutes>59)
        return hours;
    else if(elapsedHours>24)
        return days;
    else*/
        return seconds;
}


private void showPopupMenu(View view, final int position, final Movie movie) {
    PopupMenu popup = new PopupMenu(context, view);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.movie_menu, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_edit:
                    listener.onUpdate(movie);
                    notifyDataSetChanged();
                    return true;
                case R.id.action_delete:
                    listener.onDelete(movie, position);
                    return true;
                default:
            }
            return false;
        }
    });
    popup.show();
}

@Override
public int getItemCount() {
    return movies.size();
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{ ArrayList电影; 电影项目监听器; 语境; FirebaseDatabase FirebaseDatabase; 数据库参考数据库参考; 十进制测向; 公共MyAdapter(ArrayList电影){ 这部电影=电影; } 公共MyAdapter(@NonNull上下文、ArrayList电影、movieItemListener侦听器){ this.context=上下文; 这部电影=电影; this.listener=listener; } @凌驾 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){ View-View=LayoutInflater.from(parent.getContext()).flate(R.layout.movie\u布局,parent,false); MyViewHolder viewHolder=新的MyViewHolder(视图); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(最终MyViewHolder,最终int位置){ df=新的十进制格式(“#.#”); 最终电影=电影。获取(位置); 字符串currentTime=DateFormat.getDateTimeInstance().format(新日期()); 最后一个字符串saveTime=movie.getCurrentDateTime(); Toast.makeText(上下文,“abc”+getTimeDiff(currentTime,saveTime),Toast.LENGTH_SHORT.show(); holder.tvDate.setText(getTimeDiff(currentTime,saveTime)); holder.tvregrations.setText(df.format(movie.getAvgRating()); firebaseDatabase=firebaseDatabase.getInstance(); databaseReference=firebaseDatabase.getReference().child(“电影”); databaseReference.child(movie.getId()).addValueEventListener(新的ValueEventListener()){ @凌驾 公共void onDataChange(DataSnapshot DataSnapshot){ holder.tvRatings.setText(df.format(dataSnapshot.child(“avgRating”).getValue()); holder.tvViews.setText(String.valueOf(dataSnapshot.child(“ViewScont”).getValue())+“视图”); } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); holder.tvTitle.setText(movie.getTitle()); holder.overflow.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ showPopupMenu(holder.overflow、position、movie); } }); } 私有字符串getTimeDiff(字符串currentTime、字符串saveTime){ 字符串diff=“”; SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“dd/M/yyyy hh:mm:ss”); 试一试{ Date date1=simpleDateFormat.parse(当前时间); Date date2=simpleDateFormat.parse(保存时间); diff=打印差异(日期1,日期2); Toast.makeText(上下文,“in diff”,Toast.LENGTH_SHORT).show(); }捕获(解析异常){ e、 printStackTrace(); } 返回差; } 公共字符串打印差异(日期开始日期、日期结束日期){ long different=endDate.getTime()-startDate.getTime(); 长秒sinmilli=1000; 长分钟单位为毫秒=秒单位为毫秒*60; 长小时毫米=分钟毫米*60; 长日千分之一=小时千分之一*24; 长时间延迟天数=不同/天数毫秒; 不同=不同的%daysInMilli; 长时长=不同/小时数单位:百万; 不同=不同的%hoursInMilli; long elapsedMinutes=不同的/分钟数,单位为毫秒; 不同=不同的%minutesInMilli; 长延时秒=不同/秒毫秒; String days=String.valueOf(elapsedDays); String hours=String.valueOf(elapsedhurs); 字符串分钟数=String.valueOf(elapsedMinutes); String seconds=String.valueOf(elapsedSeconds); /*如果(延时秒数>59) 返回分钟数; 否则如果(elapsedMinutes>59) 返程时间; 否则如果(elapsedHours>24) 返程天数; 否则*/ 返回秒数; } private void showPopupMenu(查看视图、最终整型位置、最终电影){ PopupMenu popup=新的PopupMenu(上下文、视图); MenuInflater充气器=弹出窗口。getMenuInflater(); 充气器。充气(R.menu.movie_菜单,popup.getMenu()); setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){ @凌驾 公共布尔onMenuItemClick(菜单项){ 开关(item.getItemId()){ 案例R.id.action\u编辑: onUpdate(电影); notifyDataSetChanged(); 返回true; 案例R.id.行动\删除: onDelete(电影、位置); 返回true; 违约: } 返回false; } }); popup.show(); } @凌驾 public int getItemCount(){ 返回电影。大小(); } } 我已经搜索了很长时间,但没有找到解决方案。

有人知道我在这方面做错了什么吗?

您使用了错误的模式,这导致了异常,
diff
将返回为空sting,因此您可以使用

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");

    try {
        Date date1 = simpleDateFormat.parse(currentTime);
        Date date2 = simpleDateFormat.parse(saveTime);
即使是更好的解决方案,也要使用

DateFormat df = DateFormat.getDateTimeInstance();    
    try {
        Date date1 = df.parse(currentTime);
        Date date2 = df.parse(saveTime);

您使用了错误的模式,这会导致异常,并且
diff
将作为空sting返回,因此您可以使用

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");

    try {
        Date date1 = simpleDateFormat.parse(currentTime);
        Date date2 = simpleDateFormat.parse(saveTime);
即使是更好的解决方案,也要使用

DateFormat df = DateFormat.getDateTimeInstance();    
    try {
        Date date1 = df.parse(currentTime);
        Date date2 = df.parse(saveTime);

我不完全理解,但希望这能奏效 在节点中,将当前日期另存为

long currentDateTime=new Date().getTime();
然后在你的getTimeDifference方法中

private String getTimeDifference(){
   long difference=new Date().getTime()-movie.getCurrentDateTime();
   DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
   return formatter.format(new Date(difference));
}

我不完全理解,但希望这能奏效 在节点中,将当前日期另存为

long currentDateTime=new Date().getTime();
然后在你的getTimeDifference方法中

private String getTimeDifference(){
   long difference=new Date().getTime()-movie.getCurrentDateTime();
   DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
   return formatter.format(new Date(difference));
}

注意
String saveTime=movie.getCurrentDateTime()
,它是
String
not
long
我让她用long和not-in-String保存时间,作为“long currentDateTime=new”