2014-10-04 170 views
0

我是新来的android开发,现在我试图解析一个J SON数组到对象,然后将每个对象保存到数组列表中,然后显示数组适配器的数组列表。但是,现在我只能让阵列适配器显示最后一个元素。Arrayadapter只返回最后一个元素

这里是主类

public class Venue extends Activity { 

     Venue_Listing venue = new Venue_Listing(); 
     ArrayList<Venue_Listing> venueList; 
     ListView listview; 

    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      listview = (ListView) findViewById(R.id.list); 

      new GetVenus().execute(URL); 
      venueList = new ArrayList<Venue_Listing>(); 
    } 

    private class GetVenus extends AsyncTask<String, Void, Boolean> { 

      ProgressDialog dialog; 
      String data; 

       protected void onPreExecute() { 
        super.onPreExecute(); 
        dialog = new ProgressDialog(Venue.this); 
        dialog.setMessage("Loading, please wait"); 
        dialog.show(); 
        dialog.setCancelable(false); 
       } 

       protected Boolean doInBackground(String... url) { 
        try { 
         HttpGet httppost = new HttpGet(url[0]); 
         HttpClient httpclient = new DefaultHttpClient(); 
         HttpResponse response = httpclient.execute(httppost); 

         int status = response.getStatusLine().getStatusCode(); 

         if (status == 200) { 
          HttpEntity entity = response.getEntity(); 
          data = EntityUtils.toString(entity); 
         } 
         return true; 
        } 
        catch (ParseException e1) { 
          e1.printStackTrace(); 
        } 
        catch (IOException e) { 
          e.printStackTrace(); 
        } 
        return false; 
       } 

       protected void onPostExecute(Boolean result) { 
        dialog.cancel(); 
        Venue_Listing_Adapter adapter = new     

        Venue_Listing_Adapter(getApplicationContext(),R.layout.venue_list_layout, venueList); 
        try { 
         JSONArray jarray = new JSONArray(data); 
         for (int i = 0; i < jarray.length(); i++) { 
           JSONObject object = jarray.getJSONObject(i); 
            if (venue != null) { 
             venue.SET_ID(object.getString("venue_ID")); 
             venue.SET_NAME(object.getString("name")); 

             listview.setAdapter(adapter); 
            }   
          } 

        } 
        catch (JSONException e) { 
          e.printStackTrace(); 
        } 
       } 
      } 
    } 

此类包含所有歼SON解析数据

public class Venue_Listing { 

    private String ID; 
    private String NAME; 

public Venue_Listing() { 
} 

public Venue_Listing(String ID, String NAME) { 
    super(); 
    this.ID = ID; 
    this.NAME = NAME; 
} 

// setter & getter.... 

这里就是我有我的阵列适配器

public class Venue_Listing_Adapter extends ArrayAdapter<Venue_Listing> { 

private ArrayList<Venue_Listing> objects; 

public Venue_Listing_Adapter(Context context, int resource, ArrayList<Venue_Listing> objects) { 
    super(context, resource, objects); 
    this.objects = objects; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 

    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.venue_list_layout, null); 
    } 

    Venue_Listing i = objects.get(position); 

    if (i != null) { 
     TextView id = (TextView) v.findViewById(R.id.id); 
     TextView name = (TextView) v.findViewById(R.id.name); 

     if (id != null){ 
      id.setText(i.GET_ID()); 
     } 


     if (name != null) { 
      name.setText(i.GET_NAME()); 
     } 
    } 

    return v; 
    } 
} 

任何帮助将不胜感激 谢谢

回答

0

请打印并检查'venueList'的值。 您尚未在'venueList'对象中添加值。

您需要每次创建“场地”对象并在“场地列表”中添加对象'场地'。因此,您没有获得列表视图中的所有项目。

代码可能会走这条路: -

Venue_Listing venue; 
       try { 
        JSONArray jarray = new JSONArray(data); 
        for (int i = 0; i < jarray.length(); i++) { 
          JSONObject object = jarray.getJSONObject(i); 
          venue = new Venue_Listing(); 
           if (object != null) { 
            venue.SET_ID(object.getString("venue_ID")); 
            venue.SET_NAME(object.getString("name")); 
            venueList.add(venue); 
           }   
         } 
         Venue_Listing_Adapter adapter = new Venue_Listing_Adapter(getApplicationContext(),R.layout.venue_list_layout, venueList); 
         listview.setAdapter(adapter); 

       } 
       catch (JSONException e) { 
         e.printStackTrace(); 
       } 
+0

谢谢了现在的工作。 – 2014-10-05 15:59:18

相关问题