java - 错误:java.lang.ClassCastException:java.lang.String 无法转换为 com.example.animeguide.AnimeListOne
问题描述
我有一个带有 Imageview 和 Textview 的 gridview。我通过意图获取名称和图像 URL。我想在 textview 中显示名称并在 imageview 中加载 url 但我收到错误“java.lang.ClassCastException: java.lang.String cannot be cast to com.example.animeguide.AnimeListOne”
我的片段
public class NotificationsFragment extends Fragment {
ArrayList<AnimeListOne> list = new ArrayList<AnimeListOne>();
GridView listv;
private NotificationsViewModel notificationsViewModel;
private FragmentNotificationsBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
notificationsViewModel =
new ViewModelProvider(this).get(NotificationsViewModel.class);
binding = FragmentNotificationsBinding.inflate(inflater, container, false);
View root = binding.getRoot();
listv = root.findViewById(R.id.listv);
Intent intent = getActivity().getIntent();
String animename = intent.getStringExtra("nameanime");
Intent newintent = getActivity().getIntent();
String url = newintent.getStringExtra("url2");
list.add(new AnimeListOne(animename , url));
loadData2();
saveData2();
ListNewAdapter adapter = new ListNewAdapter(getContext(), R.layout.watch_list, list);
listv.setAdapter(adapter);
listv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
list.remove(position);
adapter.notifyDataSetChanged();
saveData2();
return true;
}
});
return root; }
private void saveData2() {
SharedPreferences sp = getActivity().getSharedPreferences("shared preferences", MODE_PRIVATE);
SharedPreferences.Editor ed = sp.edit();
Gson gson = new Gson();
String json = gson.toJson(list);
ed.putString("anime list", json);
ed.apply();
}
private void loadData2() {
SharedPreferences sp = getActivity().getSharedPreferences("shared preferences", MODE_PRIVATE);
Gson gson = new Gson();
String json = sp.getString("anime list", null);
Type type = new TypeToken<ArrayList<String>>() {
}.getType();
list = gson.fromJson(json, type);
if (list == null) {
list = new ArrayList<AnimeListOne>();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
'''
我的适配器类
public class ListNewAdapter extends ArrayAdapter<AnimeListOne> {
private Context mContext;
public ListNewAdapter(@NonNull @NotNull Context context, int resource, @NonNull @NotNull ArrayList<AnimeListOne> objects) {
super(context, resource, objects);
mContext = context;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
String name = getItem(position).getName();
String url = getItem(position).getUrl();
AnimeListOne animeListOne = new AnimeListOne(name , url);
convertView = LayoutInflater.from(mContext).inflate(R.layout.watch_list,parent, false);
TextView tvname = (TextView)convertView.findViewById(R.id.anime_name);
ImageView tvurl = (ImageView)convertView.findViewById(R.id.list_photo);
tvname.setText(name);
Glide.with(mContext).load(url).into(tvurl);
return convertView;
}
}
'''
动漫列表一类
public class AnimeListOne {
private String name;
private String url;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public AnimeListOne(String name, String url) {
this.name = name;
this.url = url;
}
}
解决方案
检查这一行:
Type type = new TypeToken<ArrayList<String>>() {}.getType();
尝试这个:
Type type = new TypeToken<ArrayList<AnimeListOne>>() {}.getType();
推荐阅读
- c++ - 为什么 for 循环中的行为之间存在差异?
- python - 无法在我的 colab python 代码中使用子进程
- r - 创建具有匹配行名称的列表,如 R 中的矩阵
- sql - 是否可以有一个外键引用多个表?
- java - 用单个字母替换所有双倍或三倍的字母
- angular - JhiEventManager 多个订阅
- laravel - 如何在laravel中插入多条记录而不循环
- node.js - 使用 npm 安装 bassaudio 库时出现问题
- php - Docusign PHP 在尝试获取令牌时获取“invalid_grant:unsupported_grant_type”(JWT auth)
- mysql - 如何获取单级传销树的团队总数