2013-04-29 7 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", "идентификатор": "58", "имя": "Один}, {" UID ":" Event_5179625c988f60.49787125" , "идентификатор": «59», «name»: «Super 5 "}, {" uid ":" Event_517969f6ac59d3.04395373 "," id ":" 60 "," name ":" Main Событие 2013 ",}, {" uid ":" Event_517ab1f1bb91c0.03505404 "," идентификатор ":" 61" , "имя": "Первый шаг "}], "тег": "listimage"}

есть ли у вас какие-либо советы?

+0

Какие переменные объявлены вне цикла for, которые участвуют в этом процессе? – christopher

+2

Этот код выглядит правильно для меня. Можете ли вы добавить данные JSON, которые вы обрабатываете? –

+0

Это данные JSON, которые обрабатываются: {"error": 0, "success": 1, "events": [{"uid": "Event_51796139b113d8.73834778", "id": "58", " name ":" One way}, {"uid": "Event_5179625c988f60.49787125", "id": "59", "name": "Super 5"}, {"uid": "Event_517969f6ac59d3.04395373", "id ":" 60 "," name ":" Main Event 2013 ",}, {" uid ":" Event_517ab1f1bb91c0.03505404 "," id ":" 61 "," name ":« Первый шаг »}],« tag »:« listimage »} Я объявил tornei arraylist:' tornei = new ArrayList (); ' в редакторе onCreate. Я обновил сообщение. – UserK

ответ

0

Вы скопировали и вставляете свой код или перепечатываете его? Кажется, что ваш журнал вывода может быть, так как линия вы показали выше:

Log.e ("AllEvents репортер", "Torneo Numero: "+ j +" Имя:" + tornei. получить (к) .getName());

это на самом деле

Log.e ("AllEvents репортер", "Торнео Numero: "+ J +" Название:" + tornei.get (я) .getName());

, где tornei.get(i).getName() будет просто выводить последний в наборе данных, что вы видите, но это всего лишь предположение. Как сказал Билл, ваш код кажется прекрасным

+0

Я знаю, что это немного странно, но код tornei.get (j) .getName(), я получаю четыре одинаковых элемента в списке – UserK