我正在解析一些JSON数据卡车密钥(ID)和名称(value)。我将其放在哈希图中,我想在 ListView
中显示 value 。
但是,我不断遇到此错误
Hashmap不能施放到java.util.map $ entry
在这条线上:return (Map.Entry) mArrayList.get(position);
在我的Truckadapter中。
任何人都可以看到我在做什么错了吗?
这是解析JSON的肉,将其添加到ArrayList,然后实例化listView适配器。
private List<HashMap<String, String>> listTrucks = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < arrayRecordSet.length(); i++) {
record = arrayRecordSet.getJSONObject(i);
map = new HashMap<>();
map.put("MYKEY", record.getString("SOME TRUCK KEY"));
map.put("MYVALUE", record.getString("SOME TRUCK VALUE"));
listTrucks.add(map);
}
TruckAdapter truckAdapter = new TruckAdapter(listTrucks);
lv.setAdapter(truckAdapter);
我的适配器类
public class TruckAdapter extends BaseAdapter {
private final ArrayList mArrayList;
public TruckAdapter(ArrayList<HashMap<String, String>> map){
mArrayList = map;
}
@Override
public int getCount() {
return mArrayList.size();
}
@Override
public Map.Entry<String, String> getItem(int position) {
return (Map.Entry) mArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
} else {
result = convertView;
}
Map.Entry<String, String> item = getItem(position);
((TextView) result.findViewById(R.id.text1)).setText(item.getValue());
return result;
}
}
json
[{"TRKlTruckKey":"1","TRKch10TruckNumber":"Ford"},{"TRKlTruckKey":"2","TRKch10TruckNumber":"Jeep"} ......
您正在定义ArrayList<HashMap<String, String>>
,但是您正在尝试从getItem
方法获得Map.Entry<String, String>
。您的列表应为ArrayList<Map.Entry<String, String>>
,并修复加载方法:
Map.Entry<String, String> map;
for (int i = 0; i < arrayRecordSet.length(); i++) {
record = arrayRecordSet.getJSONObject(i);
map = new AbstractMap.SimpleEntry<String, String>(record.getString("SOME TRUCK KEY"), record.getString("SOME TRUCK VALUE"));
listTrucks.add(map);
}
但是,创建卡车的pojo可能很容易:
卡车类
public class Truck {
private String TRKlTruckKey; //+getters/+setters
private String TRKch10TruckNumber; //+getters/+setters
public Truck(String TRKlTruckKey, String TRKch10TruckNumber) {
...
}
}
加载方法
for (int i = 0; i < arrayRecordSet.length(); i++) {
record = arrayRecordSet.getJSONObject(i);
listTrucks.add(new Truck(record.getString("SOME TRUCK KEY", record.getString("SOME TRUCK VALUE")));
}
检索方法
@Override
public Map.Entry<String, String> getItem(int position) {
Truck truck = listTrucks.get(position);
return new AbstractMap.SimpleEntry<String, String>(truck.getTRKlTruckKey, truck.getTRKch10TruckNumber);
}
创建一个名为 Truck
的类。
for (int i = 0; i < arrayRecordSet.length(); i++) {
record = arrayRecordSet.getJSONObject(i);
Truck truck = new Truck();
truck.setKey(record.getString("TRKlTruckKey"));
truck.setNumber(record.getString("TRKch10TruckNumber"));
listTrucks.add(truck);
}
然后您的适配器的构造函数:
public TruckAdapter(ArrayList<Truck> trucks){
mArrayList = trucks;
}
和您的getItem()方法:
@Override
public Truck getItem(int position) {
return mArrayList.get(position);
}