Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用Gson将JSON转换为ListView_Android_Json_Listview_Android Listview_Gson - Fatal编程技术网

在Android中使用Gson将JSON转换为ListView

在Android中使用Gson将JSON转换为ListView,android,json,listview,android-listview,gson,Android,Json,Listview,Android Listview,Gson,我正在尝试在我的Android应用程序的列表视图中放置json结果 这是我的Json: [ { "Result": "8:30,21", "Meeting": "Antwerp Olympics", "Event": "3000m", "Date": "30/05/2013" }, { "Result": "008,32", "Meeting": "Antwerp Olympi

我正在尝试在我的Android应用程序的列表视图中放置json结果

这是我的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-Gson=new-Gson();
Result[]res=gson.fromJson(results,Result[].class);
ListView lv1=(ListView)getView().findViewById(R.id.sampleListView);
字符串[]值=新字符串[]{}//价值观
ArrayAdapter文件=新的ArrayAdapter(getActivity(),android.R.layout.list_内容,值);
lv1.setAdapter(文件);
通过GSON获得一个json结果,我使用了一个简单的json。现在我不知道如何在我的listview中实现这个JSON结果。如何填充字符串[]值


提前感谢

您可以在ArrayAdapter中使用自己的类。如
ArrayAdapter

我建议您使用扩展
ArrayAdapter

并重写
getView()
方法


getView()
方法中使用此方法:(您不必这样做,但为了获得更好的性能。)

下面是一个示例,我调用一个Web服务并返回一个结果,该结果是一个对象列表。然后,我解析JSON对象并将它们放入hashmap项列表中。第二段代码是我将hashmap项列表键入实际的listview。它对listview项使用自定义布局

列表>值=新数组列表>()
结果=clsGlobals.PerformGetFromWeb(appcontext,客户端)

if(结果!=“”)
{
尝试
{                               
JSONArray menuItems=新的JSONArray(结果);
对于(int i=0;i0)
{               
//ArrayAdapter=新的ArrayAdapter(MyAppDateActivity.this,R.layout.listitemlayout,values);
字符串[]colsNames=新字符串[]{“MenuItemName”,“MenuItemDesc”};
int[]resItemsToAssign=new int[]{R.id.lstName,R.id.lstDesc};
SimpleAdapter sa=新的SimpleAdapter(appContext、values、R.layout.listitemlayout、colsNames、resItemsToAssign);
listViewMenu.setAdapter(sa);
}

创建一个名为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);
ListView lv1=(ListView)getView().findViewById(R.id.sampleListView);
Gson Gson=新的Gson();
List events=(List)gson.fromJson(results,newTypeToken>(){}.getType());
ArrayAdapter文件=新的ArrayAdapter(……);
lv1.setAdapter(文件);
编辑, 您应该创建自定义适配器类和行布局

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;
} 
公共类MyCustomAdapter扩展了ArrayAdapter{
私人最终名单;
私人最终活动背景;
公共MyCustomAdapter(活动上下文、列表){
super(上下文,R.layout.rowlayout,列表);
this.context=上下文;
this.list=列表;
}
静态类视窗夹{
受保护的文本视图事件标题;
受保护的文本视图事件日期;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=空;
LayoutInflater充气器=上下文。getLayoutInflater();
视图=充气机。充气(R.layout.rowlayout,null);
最终ViewHolder ViewHolder=新的ViewHolder();
viewHolder.eventTitle=(TextView)view.findViewById(R.id.label);
viewHolder.eventDate=(TextView)view.findViewById(R.id.date);
view.setTag(viewHolder);
ViewHolder=(ViewHolder)view.getTag();
holder.eventTitle.setText(list.get(position.Event));
holder.eventDate.setText(list.get(position.Date));
返回视图;
} 

这里也有一个很好的教程,它们使用不同的方法,但无论如何,谢谢你,我有一个名为“Result”的“EventEntity”类,我正在实现你的代码。我会让你知道的。谢谢你的回答。我的应用程序现在显示一个填充的listview。但它仍然不正确。它显示例如:Result@321cd11..我应该怎么做?添加一个toString?或者在List values=(List)gson.fromJson(results,new-TypeToken(){}.getType())中修改一些内容;ArrayAdapter files=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,值)安德烈杰夫纳如果你陷入困境,请告诉我know@AndrejHefner确定更高级的适配器正确列出项目数据我将更新我的答案。你应该自定义adapter@AndrejHefner我用自定义适配器类示例更新了我的答案。别忘了在layouts文件夹中创建rowlayout
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;
}