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