Ошибка : java.lang.Исключение ClassCastException: java.lang.Строка не может быть передана в com.example.animeguide.Анимелистон

#java #android #android-studio #listview #listadapter

Вопрос:

У меня есть представление сетки с изображением и текстовым представлением. Я получаю имена и URL-адреса изображений с помощью намерения. Я хочу показать имя в textview и загрузить URL-адреса в imageview, но я получаю ошибку » java.lang.Исключение ClassCastException: java.lang.Строка не может быть передана в com.example.animeguide.Анимелистон »

Мой Фрагмент

 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;
    }
}
 

»’

Класс AnimeListOne

 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;
    }
}
 

Ответ №1:

Проверьте эту строку:

 Type type = new TypeToken<ArrayList<String>>() {}.getType();
 

Попробуй это:

  Type type = new TypeToken<ArrayList<AnimeListOne>>() {}.getType();
 

Комментарии:

1. Теперь он выдает ошибку : «Ожидаемый объект BEGIN_OBJECT, но был СТРОКОЙ в строке 1, столбец 3, путь $»