2013-04-29 135 views
0

我想添加几个事件从数据库检索到一个ArrayList为了填充列表视图。我创建了一个事件类,并设置了所有的方法。如何将元素添加到ArrayList

EventsFunctions eventsFunctions; 
JSONParser jParser = new JSONParser(); 
JSONArray events = null; 
ArrayList<Torneo> tornei; 

    @Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.all_events); 

    tornei= new ArrayList<Torneo>(); 
    LoadAllEvents eventsLoader = new LoadAllEvents(); 
    [...] 
} 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
public class LoadAllEvents extends AsyncTask<String, Integer, JSONObject> 
{ 
    LoadAllEvents() 
    { 
     eventsFunctions = new EventsFunctions(); 
    } 

    @Override 
    protected void onPreExecute() 
    { 
     [...] 
    } 

    protected JSONObject doInBackground(String... params) 
     { 
      String a = "code1"; 
      // getting JSON string from URL 
      return eventsFunctions.eventList(a); 
     } 

     protected void onPostExecute(JSONObject json) 
     { 

      // Check your log cat for JSON reponse 
      Log.d("All Events list data: ", json.toString()); 

      try 
      { 
       // Checking for SUCCESS TAG 
       String success = json.getString(TAG_SUCCESS); 
       if (success != null) 
       { 
        if (Integer.parseInt(json.getString(TAG_SUCCESS)) != 0) 
        { 
         // events found 
         // Getting Array of Events 
         events = json.getJSONArray(TAG_EVENTS); 
         Log.e("AllEventsActivity"," "+ Integer.toString(events.length())+ " events received from the database"); 

这是代码

// looping through All Products  
         for (int i = 0; i < events.length(); i++) 
          { 
           JSONObject c = events.getJSONObject(i); 

           // Storing each json item in variable 
           String id = c.getString(TAG_UID); 
           String name  = c.getString(TAG_NAME); 


           Torneo torneo = new Torneo(); 
           torneo.setName(name); 

           Log.e("AllEventsActivity", "Tournament name: " + torneo.getName()); 

           tornei.add(i,torneo); //Or just tornei.add(torneo); 


          } 

          for (int j=0; j<tornei.size() ;j++) 
          { 
           Log.e("AllEvents Reporter", "Torneo numero: "+ j + " Nome: " + tornei.get(j).getName()); 
          } 

        } 

的相关部分和的AsyncTask执行结束:

else if (Integer.parseInt(json.getString(TAG_SUCCESS)) != 0) 
      { 
       Log.d("Events Report: ", "NO events scheduled"); 

      } 
     } 
    } catch (JSONException e) 
    { 
     e.printStackTrace(); 
    } 
    // updating UI from Background Thread 
    [...] 

} 

这是输出:

E/AllEventsActivity(10785): 4 events received from the database 
E/AllEventsActivity(10785): Tournament name: One way 
E/AllEventsActivity(10785): Tournament name: Super 5 
E/AllEventsActivity(10785): Tournament name: Main Event 2013 
E/AllEventsActivity(10785): Tournament name: First step 
E/AllEvents Reporter(10785): Torneo numero: 0 Nome: First step 
E/AllEvents Reporter(10785): Torneo numero: 1 Nome: First step 
E/AllEvents Reporter(10785): Torneo numero: 2 Nome: First step 
E/AllEvents Reporter(10785): Torneo numero: 3 Nome: First step 
I/MemoryCache(10785): MemoryCache will use up to 16.0MB 
D/dalvikvm(10785): GC_FOR_ALLOC freed 153K, 7% free 12544K/13383K, paused 22ms, total 22ms 
I/dalvikvm-heap(10785): Grow heap (frag case) to 12.958MB for 262160-byte allocation 

似乎存储在Arraylist中的唯一事件是for循环中添加的最后一个元素。

日志应该是这样的:

E/AllEvents Reporter(10785): Torneo numero: 0 Nome: One way 
E/AllEvents Reporter(10785): Torneo numero: 1 Nome: Super 5 
E/AllEvents Reporter(10785): Torneo numero: 2 Nome: Main Event 2013 
E/AllEvents Reporter(10785): Torneo numero: 3 Nome: First step 

这是解析JSON字符串:

{ “错误”:0, “成功” :1, “事件”:[{ “UID”: “Event_51796139b113d8.73834778”, “ID”: “58”, “姓名”: “一},{” UID “:” Event_5179625c988f60.49787125" , “标识”: “59”,“名称”:“超级 5“},{”uid“:”Event_517969f6ac59d3.04395373“,”id“:”60“,”name“:”Main Event 2013“,},{”uid“:”Event_517ab1f1bb91c0.03505404“ ID“:”61“,”name“:”首先 步骤“}],”tag“:”listimage“}

您有什么建议吗?

+0

在for循环之外声明哪些变量在过程中涉及? – christopher 2013-04-29 16:00:28

+2

此代码对我来说看起来是正确的。你可以添加你正在处理的JSON数据吗? – 2013-04-29 16:04:24

+0

这是我正在处理的JSON数据: {“error”:0,“success”:1,“events”:[{“uid”:“Event_51796139b113d8.73834778”,“id”:“58”,“名称“:”One way},{“uid”:“Event_5179625c988f60.49787125”,“id”:“59”,“name”:“Super 5”},{“uid”:“Event_517969f6ac59d3.04395373”,“id “:”60“,”name“:”主要事件2013“,},{”uid“:”Event_517ab1f1bb91c0。03505404“,”id“:”61“,”name“:”First step“}],”tag“:”listimage“} 我已经声明tornei arraylist:'tornei = new ArrayList 我已经更新了这篇文章 – UserK 2013-04-30 18:25:05

回答

0

您是否复制并粘贴您的代码,或者重新键入它?看起来你的日志输出可能是因为你上面显示的行:

Log.e(“AllEvents Reporter”,“Torneo:”+ j +“Nome:”+ tornei。得到(J).getName());

实际上

Log.e( “AllEvents记者”, “TORNEO NUMERO: ”+ J +“ 诺姆:” + tornei.get(ⅰ).getName());

其中tornei.get(i).getName()只会输出数据集中的最后一个,这就是您所看到的,但这只是一个猜测。正如Bill所说,你的代码似乎很好

+0

我知道这有点奇怪,但是代码是tornei.get(j).getName(),我在listview中获得了四个相同的项目 – UserK 2013-04-29 16:33:17