Java 创建listview适配器时出错
我会根据api json响应创建一些listview,但我的代码中仍然存在这个LinkedTreeMap错误。谁能帮我解决这个问题Java 创建listview适配器时出错,java,android,Java,Android,我会根据api json响应创建一些listview,但我的代码中仍然存在这个LinkedTreeMap错误。谁能帮我解决这个问题 public class KategoriListAdapter extends BaseAdapter { Context context; ArrayList<Barang> barang; public KategoriListAdapter(Context context, ArrayList<Barang>
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;
}
}
替换
Object getrow=this.barang.get(i);
LinkedTreeMap rowmap=(LinkedTreeMap)getrow;
字符串nama=rowmap.get(“nama”).toString();
字符串harga=rowmap.get(“harga”).toString();
字符串username=rowmap.get(“username”).toString()代码>
与
Barang getrow=this.Barang.get(i);
字符串nama=getrow.getName();
字符串harga=getrow.getHarga();
字符串username=getrow.getUsername()代码>您正在适配器构造函数中传递“Barang”对象的ArrayList,这意味着您的适配器中已经有一个对象Barang列表,您可以直接使用它,而无需强制转换到树映射
在适配器的getView方法中,更改此
Object getrow = this.barang.get(i);
到
它将给出位于Barang列表中i位置的Barang对象。
您可以使用对象中定义的getters方法从该对象获取数据,如下所示
String harga = barang.getHarga();
String nama = barang.getNama();
String userName = barang.getUsername();
并将其设置为您的文本视图或
您可以直接从Barang对象将数据设置为TextView(在设置为TextView之前,无需在变量中进行额外的设置),如下所示
tvHarga.setText(barang.getHarga());
tvNama.setText(barang.getNama());
tvUsername.setText(barang.getUsername());
请添加Barang对象类codeUse Barang getrow=this.Barang.get(i);而不是对象getrow=this.barang.get(i);然后从getrow(Barang)object中获取所有值我有点困惑,为什么要将其强制转换为映射,而您只需获取对象并调用其上的getter?Barang.get(i)
是Barang
,如果它Barang
没有扩展LinkedTreeMap
,那么你显然不能将它转换到LinkedTreeMap
谢谢,你不仅给了我正确的代码,还向我解释了为什么我的代码是错误的。我真是帮了大忙谢谢Carnal。Sandeep Insan解释得很好,他说:“是的,我懒得用你当前的流程来编写解决方案。”+我投我一票
String harga = barang.getHarga();
String nama = barang.getNama();
String userName = barang.getUsername();
tvHarga.setText(barang.getHarga());
tvNama.setText(barang.getNama());
tvUsername.setText(barang.getUsername());