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 files = new ArrayAdapter(getActivity(),android.R.layout.list_content, values);
lv1.setAdapter(files);

Атрыманне выніку JSon з працай GSON, я зрабіў гэта з дапамогай простага JSON. Цяпер я не ведаю, як рэалізаваць гэты вынік JSON ў маёй ListView. Як я павінен запоўніць [] значэнне тыпу String?

Загадзя дзякую

4
дададзена аўтар Rachel Gallen, крыніца
дададзена аўтар Rachel Gallen, крыніца
дададзена аўтар Rachel Gallen, крыніца
яны выкарыстоўваюць розныя метады, але ўсё роўна дзякуй
дададзена аўтар user1395001, крыніца
яны выкарыстоўваюць розныя метады, але ўсё роўна дзякуй
дададзена аўтар user1395001, крыніца
яны выкарыстоўваюць розныя метады, але ўсё роўна дзякуй
дададзена аўтар user1395001, крыніца

8 адказы

Стварыце клас з імем 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 DataBind коды да гэтага

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

EDIT, вы павінны стварыць карыстацкі клас адаптара і размяшчэнне радкоў

public class MyCustomAdapter extends ArrayAdapter {

  private final List list;
  private final Activity context;

  public MyCustomAdapter (Activity context, List 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;
} 
7
дададзена
@AndrejHefner, калі вы затрымаліся ў чым-то калі ласка, дайце мне ведаць,
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner нармальна больш прасунуты адаптар спіс элементаў дадзеных corretly я буду абнаўляць мой адказ. Вы sould зрабіць свой уласны адаптар
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner я абнавіў свой адказ з прыкладам карыстацкага класа адаптара. не забудзьцеся стварыць rowlayout на тэчку раскладак
дададзена аўтар Mehmet Emre, крыніца
дзякуй @Amourreux Я працую ў фрагменце. Калі гэта будзе праблема?
дададзена аўтар user1395001, крыніца
Дзякуй за адказ. Маё прыкладанне зараз паказвае населенае ListView. Але гэта моголь правільна яшчэ. Гэта паказвае, напрыклад: Вынік @ 321cd11 .. Што я павінен рабіць? Дадаць ToString? або адаптуюць што-то ў спісе значэння = (List ) gson.fromJson (вынікі, новы TypeToken >() {} .getType ()); ArrayAdapter <�Вынік> Файлы = новы ArrayAdapter (getActivity (), android.R.layout.simple_l & ZWNJ; ist_item_1, значэння);
дададзена аўтар user1395001, крыніца
У мяне ёсць клас «EventEntity» пад назвай «Вынік», я ўпэўнены, рэалізацыю коды. Я дам вам ведаць
дададзена аўтар user1395001, крыніца

Стварыце клас з імем 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 DataBind коды да гэтага

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

EDIT, вы павінны стварыць карыстацкі клас адаптара і размяшчэнне радкоў

public class MyCustomAdapter extends ArrayAdapter {

  private final List list;
  private final Activity context;

  public MyCustomAdapter (Activity context, List 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;
} 
7
дададзена
@AndrejHefner, калі вы затрымаліся ў чым-то калі ласка, дайце мне ведаць,
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner нармальна больш прасунуты адаптар спіс элементаў дадзеных corretly я буду абнаўляць мой адказ. Вы sould зрабіць свой уласны адаптар
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner я абнавіў свой адказ з прыкладам карыстацкага класа адаптара. не забудзьцеся стварыць rowlayout на тэчку раскладак
дададзена аўтар Mehmet Emre, крыніца
дзякуй @Amourreux Я працую ў фрагменце. Калі гэта будзе праблема?
дададзена аўтар user1395001, крыніца
Дзякуй за адказ. Маё прыкладанне зараз паказвае населенае ListView. Але гэта моголь правільна яшчэ. Гэта паказвае, напрыклад: Вынік @ 321cd11 .. Што я павінен рабіць? Дадаць ToString? або адаптуюць што-то ў спісе значэння = (List ) gson.fromJson (вынікі, новы TypeToken >() {} .getType ()); ArrayAdapter <�Вынік> Файлы = новы ArrayAdapter (getActivity (), android.R.layout.simple_l & ZWNJ; ist_item_1, значэння);
дададзена аўтар user1395001, крыніца
У мяне ёсць клас «EventEntity» пад назвай «Вынік», я ўпэўнены, рэалізацыю коды. Я дам вам ведаць
дададзена аўтар user1395001, крыніца

Стварыце клас з імем 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 DataBind коды да гэтага

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

EDIT, вы павінны стварыць карыстацкі клас адаптара і размяшчэнне радкоў

public class MyCustomAdapter extends ArrayAdapter {

  private final List list;
  private final Activity context;

  public MyCustomAdapter (Activity context, List 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;
} 
7
дададзена
@AndrejHefner я абнавіў свой адказ з прыкладам карыстацкага класа адаптара. не забудзьцеся стварыць rowlayout на тэчку раскладак
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner, калі вы затрымаліся ў чым-то калі ласка, дайце мне ведаць,
дададзена аўтар Mehmet Emre, крыніца
@AndrejHefner нармальна больш прасунуты адаптар спіс элементаў дадзеных corretly я буду абнаўляць мой адказ. Вы sould зрабіць свой уласны адаптар
дададзена аўтар Mehmet Emre, крыніца
дзякуй @Amourreux Я працую ў фрагменце. Калі гэта будзе праблема?
дададзена аўтар user1395001, крыніца
Дзякуй за адказ. Маё прыкладанне зараз паказвае населенае ListView. Але гэта моголь правільна яшчэ. Гэта паказвае, напрыклад: Вынік @ 321cd11 .. Што я павінен рабіць? Дадаць ToString? або адаптуюць што-то ў спісе значэння = (List ) gson.fromJson (вынікі, новы TypeToken >() {} .getType ()); ArrayAdapter <�Вынік> Файлы = новы ArrayAdapter (getActivity (), android.R.layout.simple_l & ZWNJ; ist_item_1, значэння);
дададзена аўтар user1395001, крыніца
У мяне ёсць клас «EventEntity» пад назвай «Вынік», я ўпэўнены, рэалізацыю коды. Я дам вам ведаць
дададзена аўтар user1395001, крыніца

You can use your own class in ArrayAdapter. Like ArrayAdapter

I suggest you to use a class that extends ArrayAdapter

І перавызначыць GetView() <�код /> метад.

Гэты метад выкарыстоўваецца ў GetView() метад: http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder (Вы не павінны, але для лепшай прадукцыйнасці.)

0
дададзена

You can use your own class in ArrayAdapter. Like ArrayAdapter

I suggest you to use a class that extends ArrayAdapter

І перавызначыць GetView() <�код /> метад.

Гэты метад выкарыстоўваецца ў GetView() метад: http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder (Вы не павінны, але для лепшай прадукцыйнасці.)

0
дададзена

Вось прыклад, дзе я называю WebService і атрымаць назад вынік, які ўяўляе сабой спіс аб'ектаў. Затым я разабраць аб'екты JSON і змясціць іх у спіс элементаў HashMap. Другі Snippit кода, дзе я друкую спіс элементаў HashMap да фактычнага ListView. Ён выкарыстоўвае карыстацкі макет для элементаў ListView.

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 map = new HashMap();
                            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 adapter = new ArrayAdapter(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);

        }
0
дададзена
Я працую ў Fragmet .. гэта павінна быць праблемай?
дададзена аўтар user1395001, крыніца

Вось прыклад, дзе я называю WebService і атрымаць назад вынік, які ўяўляе сабой спіс аб'ектаў. Затым я разабраць аб'екты JSON і змясціць іх у спіс элементаў HashMap. Другі Snippit кода, дзе я друкую спіс элементаў HashMap да фактычнага ListView. Ён выкарыстоўвае карыстацкі макет для элементаў ListView.

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 map = new HashMap();
                            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 adapter = new ArrayAdapter(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);

        }
0
дададзена
Я працую ў Fragmet .. гэта павінна быць праблемай?
дададзена аўтар user1395001, крыніца

Вось прыклад, дзе я называю WebService і атрымаць назад вынік, які ўяўляе сабой спіс аб'ектаў. Затым я разабраць аб'екты JSON і змясціць іх у спіс элементаў HashMap. Другі Snippit кода, дзе я друкую спіс элементаў HashMap да фактычнага ListView. Ён выкарыстоўвае карыстацкі макет для элементаў ListView.

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 map = new HashMap();
                            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 adapter = new ArrayAdapter(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);

        }
0
дададзена
Я працую ў Fragmet .. гэта павінна быць праблемай?
дададзена аўтар user1395001, крыніца