4

我正在尝试将 json 结果放入我的 Android 应用程序中的 ListView 中。

这是我的 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"
    }
]

这是我的安卓代码

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);

使用 GSON 获得 json 结果是可行的,我用一个简单的 json 做到了。现在我不知道如何在我的列表视图中实现这个 JSON 结果。我应该如何填充 String[] 值?

提前致谢

4

3 回答 3

7

创建一个名为 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 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);

编辑,您应该创建一个自定义适配器类和一个行布局

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;
} 
于 2013-05-21T19:03:08.157 回答
0

您可以在 ArrayAdapter 中使用自己的类。像ArrayAdapter<Result[]>

我建议你使用一个扩展的类ArrayAdapter<Result[]>

并覆盖getView()方法。

在方法中使用此方法:http getView(): //developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder(您不必为了更好的性能。)

于 2013-05-21T18:30:22.890 回答
0

这是一个示例,我调用 Web 服务并返回一个对象列表的结果。然后我解析 JSON 对象并将它们放入哈希图项列表中。第二个代码片段是我将 hashmap 项列表键入到实际列表视图的位置。它对列表视图项使用自定义布局。

列表> 值 = 新的 ArrayList>();
结果 = clsGlobals.PerformGetFromWeb(appcontext, 客户端);

                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);

        }
于 2013-05-21T18:58:09.717 回答