使用 SimpleDateFormat 格式化日期时抛出 ClassCastException
ClassCastException thrown when using SimpleDateFormat to format a Date
我正在制作一个备忘录 android 应用程序,其中每个列表项显示最后一次在 TextView 中修改的日期,方法是从 ArrayList<Long>
中检索它,其值使用 [=14= 转换] 在 RecyclerView 的适配器中。但是当我 运行 应用程序时,它抛出 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
并指向我的适配器中的以下代码 class:
@Override
public void onBindViewHolder(@NonNull NoteViewHolder holder, int position) {
if (position == noteContents.size()) {
//working code
} else {
holder.title.setText(noteTitles.get(position));
holder.content.setText(noteContents.get(position));
holder.date.setText(new SimpleDateFormat("yyyy/MM/DD", MainActivity.appLocale).format(new Date(noteDates.get(position)))); //here is the problem.
holder.picture.setVisibility(View.GONE);
}
}
其中 MainActivity.appLocale
指向我使用以下代码设置的当前语言环境:
public class MainActivity extends AppCompatActivity {
//other codes
public static Locale appLocale;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//other codes
Configuration conf = getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) appLocale = conf.getLocales().get(0);
else appLocale = conf.locale;
//other codes
}
//other codes
}
而 NoteViewHolder 是 Adapter 的视图持有者:
public static class NoteViewHolder extends RecyclerView.ViewHolder {
MaterialCardView noteCard;
TextView title;
TextView content;
TextView date;
ImageView picture;
NoteViewHolder(View itemView) {
super(itemView);
noteCard = (MaterialCardView) itemView.findViewById(R.id.noteCard);
title = (TextView) itemView.findViewById(R.id.dialogTitle);
content = (TextView) itemView.findViewById(R.id.content);
date = (TextView) itemView.findViewById(R.id.date);
picture = (ImageView) itemView.findViewById(R.id.picture);
}
}
请注意,在将日期算法考虑在内之前,所有这些代码都可以正常工作。
这个问题有什么解决办法吗?提前致谢。
holder.date.setText(new SimpleDateFormat("yyyy/MM/DD", MainActivity.appLocale).format(new Date(noteDates.get(position)))); //here is the problem.
这条线下
noteDates.get(position) -> Return String is issue
返回字符串值,
但应该很长。
例如new Date(7393265965);
天哪,我终于明白了!我将我的列表项保存在一个 Json 文件中,并且我有旧的日期项目,这些项目不是长的,而是字符串。我删除了应用数据,然后一切又恢复正常了!
我正在制作一个备忘录 android 应用程序,其中每个列表项显示最后一次在 TextView 中修改的日期,方法是从 ArrayList<Long>
中检索它,其值使用 [=14= 转换] 在 RecyclerView 的适配器中。但是当我 运行 应用程序时,它抛出 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
并指向我的适配器中的以下代码 class:
@Override
public void onBindViewHolder(@NonNull NoteViewHolder holder, int position) {
if (position == noteContents.size()) {
//working code
} else {
holder.title.setText(noteTitles.get(position));
holder.content.setText(noteContents.get(position));
holder.date.setText(new SimpleDateFormat("yyyy/MM/DD", MainActivity.appLocale).format(new Date(noteDates.get(position)))); //here is the problem.
holder.picture.setVisibility(View.GONE);
}
}
其中 MainActivity.appLocale
指向我使用以下代码设置的当前语言环境:
public class MainActivity extends AppCompatActivity {
//other codes
public static Locale appLocale;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//other codes
Configuration conf = getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) appLocale = conf.getLocales().get(0);
else appLocale = conf.locale;
//other codes
}
//other codes
}
而 NoteViewHolder 是 Adapter 的视图持有者:
public static class NoteViewHolder extends RecyclerView.ViewHolder {
MaterialCardView noteCard;
TextView title;
TextView content;
TextView date;
ImageView picture;
NoteViewHolder(View itemView) {
super(itemView);
noteCard = (MaterialCardView) itemView.findViewById(R.id.noteCard);
title = (TextView) itemView.findViewById(R.id.dialogTitle);
content = (TextView) itemView.findViewById(R.id.content);
date = (TextView) itemView.findViewById(R.id.date);
picture = (ImageView) itemView.findViewById(R.id.picture);
}
}
请注意,在将日期算法考虑在内之前,所有这些代码都可以正常工作。 这个问题有什么解决办法吗?提前致谢。
holder.date.setText(new SimpleDateFormat("yyyy/MM/DD", MainActivity.appLocale).format(new Date(noteDates.get(position)))); //here is the problem.
这条线下
noteDates.get(position) -> Return String is issue
返回字符串值,
但应该很长。
例如new Date(7393265965);
天哪,我终于明白了!我将我的列表项保存在一个 Json 文件中,并且我有旧的日期项目,这些项目不是长的,而是字符串。我删除了应用数据,然后一切又恢复正常了!