JSON для ListView в Android с Gson

Я пытаюсь положить json результат в ListView в моем приложении для Android.

Это мой Json:

[ { "Result": "8:30,21", "Meeting": "Antwerp Olympics", "Event": "3000m", "Date": "30/05/2013" }, { "Result": "008,32", "Meeting": "Antwerp Olympics", "Event": "Long Jump", "Date": "30/05/2013" }, { "Result": "6,35", "Meeting": "Antwerp Olympics", "Event": "High Jump", "Date": "30/05/2013" }, { "Result": "5,00", "Meeting": "Antwerp Olympics", "Event": "Discus Throw", "Date": "30/05/2013" } ] 

Это мой Android-код

 Gson gson = new Gson(); Result[] res = gson.fromJson(results, Result[].class); ListView lv1 = (ListView) getView().findViewById(R.id.sampleListView); String[] values = new String[] { }; //values ArrayAdapter<String> files = new ArrayAdapter<String>(getActivity(),android.R.layout.list_content, values); lv1.setAdapter(files); 

Получив json-результат с помощью GSON, я сделал это с помощью простого json. Теперь я не знаю, как реализовать этот результат JSON в моем списке. Как заполнить значения String []?

заранее спасибо

Создайте имя, присвоенное классу EventEntity или ваш выбор

 import com.google.gson.annotations.SerializedName; public class EventEntity{ @SerializedName("Result") public int Result; @SerializedName("Meeting") public String Meeting; @SerializedName("Event") public String Event; @SerializedName("Date") public String Date; public EventEntity() {} } 

И изменить коды данных списка listview для этого

 ListView lv1 = (ListView) getView().findViewById(R.id.sampleListView); Gson gson = new Gson(); List<EventEntity> events = (List<EventEntity>) gson.fromJson(results, new TypeToken<EventEntity>>() {}.getType()); ArrayAdapter<EventEntity> files = new ArrayAdapter<EventEntity>(..........); lv1.setAdapter(files); 

EDIT, вы должны создать собственный класс адаптера и макет строки

 public class MyCustomAdapter extends ArrayAdapter<EventEntity> { private final List<EventEntity> list; private final Activity context; public MyCustomAdapter (Activity context, List<EventEntity> list) { super(context, R.layout.rowlayout, list); this.context = context; this.list = list; } static class ViewHolder { protected TextView eventTitle; protected TextView eventDate; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; LayoutInflater inflator = context.getLayoutInflater(); view = inflator.inflate(R.layout.rowlayout, null); final ViewHolder viewHolder = new ViewHolder(); viewHolder.eventTitle = (TextView) view.findViewById(R.id.label); viewHolder.eventDate = (TextView) view.findViewById(R.id.date); view.setTag(viewHolder); ViewHolder holder = (ViewHolder) view.getTag(); holder.eventTitle.setText(list.get(position).Event); holder.eventDate.setText(list.get(position).Date); return view; } 

Вы можете использовать свой собственный класс в ArrayAdapter. Как ArrayAdapter<Result[]>

Я предлагаю вам использовать класс, расширяющий ArrayAdapter<Result[]>

И переопределить getView() .

Используйте этот метод в методе getView() : http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder (вам не обязательно, но для лучшей производительности).

Вот пример, когда я вызываю webservice и возвращаю результат, который является списком объектов. Затем я разбираю объекты JSON и помещаю их в список элементов hashmap. Второй фрагмент кода – это то, где я набираю список элементов hashmap для фактического списка. Он использует настраиваемый макет для элементов списка.

List> values ​​= new ArrayList> ();
Result = clsGlobals.PerformGetFromWeb (appcontext, client);

  if (result != "") { try { JSONArray menuItems = new JSONArray(result); for (int i = 0; i < menuItems.length(); i++) { HashMap<String, String> map = new HashMap<String, String>(); JSONObject jsonObject = menuItems.getJSONObject(i); map.put("MenuItemID", jsonObject.getString("MenuItemID")); map.put("MenuItemName", jsonObject.getString("MenuItemName")); map.put("MenuItemDesc", jsonObject.getString("MenuItemDesc")); map.put("Calories", jsonObject.getString("Calories")); map.put("Protein", jsonObject.getString("Protein")); map.put("Fat", jsonObject.getString("Fat")); map.put("Carbohydrates", jsonObject.getString("Carbohydrates")); map.put("Sodium", jsonObject.getString("Sodium")); map.put("FranchiseID", jsonObject.getString("FranchiseID")); values.add(map); } Log.d(clsGlobals.AppName, "Location menu items retrieved successfully!"); } if (values.size() > 0) { //ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyAppDateActivity.this, R.layout.listitemlayout, values); String[] colsNames = new String[] {"MenuItemName", "MenuItemDesc"}; int[] resItemsToAssign = new int[] {R.id.lstName, R.id.lstDesc}; SimpleAdapter sa = new SimpleAdapter(appContext, values, R.layout.listitemlayout, colsNames, resItemsToAssign ); listViewMenu.setAdapter(sa); } 
Intereting Posts