我正在制作一个 Memo android 应用程序,其中每个列表项通过从 ArrayList<Long>
检索它来显示在 TextView 中上次修改的日期。其值使用 new Date(noteDates.get(position))
进行转换在 RecyclerView 的适配器内。但是当我运行该应用程序时,它会抛出 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
并指向我的 Adapter 类中的以下代码:
@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 的 View 持有者:
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);
}
}
请注意,在添加日期算法之前,所有这些代码都可以正常工作。 这个问题有什么解决办法吗?提前致谢。
最佳答案
天哪,我刚刚想通了!我将列表项保存在 Json 文件中,并且我有旧的日期项,它们不是长整数,而是字符串。我删除了应用程序数据,一切又恢复正常了!
关于java - 使用 SimpleDateFormat 格式化日期时抛出 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100560/