2016-12-28 6 views
0

Я разбираю некоторые данные JSON с ключом грузовика (id) и именем (значением). Я положил его в HashMap, и я хочу отображать только Значение в ListView.Представление hashmap в ListView

Однако я получаю эту ошибку

HashMap не может быть приведен к java.util.Map $ Входа

на этой линии: 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"} ...... 
+0

я предполагаю, что это просто HashMap не ArrayList из HashMap, вы можете показать мне свою JSON –

+0

Показать Ответ JSON – Rahul

+0

Я обновил вопрос, чтобы добавить JSON –

ответ

0

Вы определяете ArrayList<HashMap<String, String>>, но вы пытаетесь получить Map.Entry<String, String> от getItem метода. Ваш список должен быть 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"))); 
} 

Retriving Метод

@Override 
public Map.Entry<String, String> getItem(int position) { 
    Truck truck = listTrucks.get(position); 
    return new AbstractMap.SimpleEntry<String, String>(truck.getTRKlTruckKey, truck.getTRKch10TruckNumber); 
} 
0

Создать класс с именем 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); 
} 
Смежные вопросы