#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, путь $»