Я получаю сообщение об ошибке при создании адаптера списка

1

Я бы создал некоторое представление списка из моего ответа API JSON, но я застрял с этой ошибкой LinkedTreeMap в моем коде. Может ли кто-нибудь помочь мне решить эту проблему?

public class KategoriListAdapter extends BaseAdapter {

    Context context;
    ArrayList<Barang> barang;

    public KategoriListAdapter(Context context, ArrayList<Barang> barang) {
        this.context = context;
        this.barang = barang;
    }

    @Override
    public int getCount() {
        return barang.size();
    }

    @Override
    public Barang getItem(int i) {
        return this.barang.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = LayoutInflater.from(context).inflate(R.layout.custom_list_view_kategori, viewGroup, false);
        }

        TextView tvNama = (TextView) view.findViewById(R.id.tv_nama);
        TextView tvHarga = (TextView) view.findViewById(R.id.tv_harga);
        TextView tvUsername = (TextView) view.findViewById(R.id.tv_username);


        Object getrow = this.barang.get(i);
        LinkedTreeMap<Object, Object> rowmap = (LinkedTreeMap) getrow;
        String nama = rowmap.get("nama").toString();
        String harga = rowmap.get("harga").toString();
        String username = rowmap.get("username").toString();

        tvNama.setText(nama);
        tvHarga.setText(harga);
        tvUsername.setText(username);

        return view;
    }

}

public class Barang {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("username")
    @Expose
    private String username;
    @SerializedName("nama")
    @Expose
    private String nama;
    @SerializedName("harga")
    @Expose
    private String harga;
    @SerializedName("gambar")
    @Expose
    private String gambar;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getHarga() {
        return harga;
    }

    public void setHarga(String harga) {
        this.harga = harga;
    }

    public String getGambar() {
        return gambar;
    }

    public void setGambar(String gambar) {
        this.gambar = gambar;
    }

}

Результат журнала при выполнении действия

java.lang.ClassCastException: com.example.barangkoz.model.Barang cannot be 
cast to com.google.gson.internal.LinkedTreeMap
    at     com.example.barangkoz.activities.KategoriListAdapter.getView(KategoriListAdapter.java:57)'
Теги:
android-studio

2 ответа

0

Вы передаете ArrayList объекта "Barang" в свой конструктор адаптера, это означает, что у вас уже есть список объектов Barang в вашем адаптере, и вы можете напрямую использовать его без приведения к TreeMap.

В вашем getView метод адаптера изменить это

Object getrow = this.barang.get(i);

в

Barang barang = barang.get(i);

это даст объект Barang в позиции я из списка Barang. и вы можете получить данные из этого объекта, используя методы getters, определенные внутри вашего объекта Barang следующим образом.

String harga = barang.getHarga();
String nama = barang.getNama();
String userName = barang.getUsername();

и установите его в свой TextView или

Вы можете напрямую установить данные для TextView из объекта Barang (не делая дополнительного шага для установки их в переменную перед установкой в TextView), как это

tvHarga.setText(barang.getHarga());
tvNama.setText(barang.getNama());
tvUsername.setText(barang.getUsername());
  • 0
    Спасибо, вы не просто дали мне правильный код, но объяснили мне, почему мой код неправильный. Я так помог.
0

замещать

Object getrow = this.barang.get(i); LinkedTreeMap<Object, Object> rowmap = (LinkedTreeMap) getrow; String nama = rowmap.get("nama").toString(); String harga = rowmap.get("harga").toString(); String username = rowmap.get("username").toString();

С

Barang getrow = this.barang.get(i); String nama = getrow.getName(); String harga = getrow.getHarga(); String username = getrow.getUsername();

  • 0
    Спасибо, Карнал. Я так новичок в этом
  • 0
    Да, мне было лень просто написать решение с вашим текущим потоком, @Sandeep Insan объяснил это очень хорошо! +1 голос от меня

Ещё вопросы

Сообщество Overcoder
Наверх
Меню