java - 创建列表视图适配器时出现错误
问题描述
我会从我的 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)`
解决方案
您正在适配器构造函数中传递“Barang”对象的 ArrayList,这意味着您的适配器中已经有一个对象 Barang 列表,您可以直接使用它而无需转换为 TreeMap。
在您的适配器的 getView 方法中更改此
Object getrow = this.barang.get(i);
到
Barang barang = barang.get(i);
它将在 Barang 列表中的 i 位置给出 Barang 对象。你可以像这样使用在你的对象 Barang 中定义的 getters 方法从这个对象中获取数据。
String harga = barang.getHarga();
String nama = barang.getNama();
String userName = barang.getUsername();
并将其设置为您的 TextView 或
您可以直接将数据从 Barang 对象设置为 TextView(无需在设置为 TextView 之前将其设置为变量),如下所示
tvHarga.setText(barang.getHarga());
tvNama.setText(barang.getNama());
tvUsername.setText(barang.getUsername());
推荐阅读
- laravel - Tinker 不使用 Laravel Dusk 进行调试
- javascript - 嵌套休息调用时出现 UnhandledPromiseRejectionWarning
- node.js - Axios catch 不会从 express 调用
- java - 如何根据 GSON 的某些值从序列化中排除对象?
- python - Python BeautifulSoup 无法加入基本 URL 并抓取截断的链接,
- python - 代理 + 硒
- matlab - 我如何创建一个与另一个序列不同的序列,其概率为 p?
- mongodb - Spring Mongo 仅通过新 POJO 的非空字段更新
- activemq-artemis - 如何接收已在 artemis 控制台中创建的多播类型队列消息
- java - 如何减少信号量 Java 中的许可?