2015-09-22 4 views
-1

Я создал настраиваемый адаптер списка, и я пытаюсь перечислить данные из базы данных SQLite. Мой список выводит правильное количество записей БД, но дублировал последний элемент БД много раз (столько же раз, сколько есть элементов в БД).Дублирующие значения, добавляемые в ArrayList

У меня есть этот код:

private class JSONParse extends AsyncTask<String, String, JSONArray> { 

    @Override 
    protected JSONArray doInBackground(String... args) { 
     JSONArray arr = null; 
     db = new DatabaseHandler(getActivity()); 
     arr = db.getSynced(); 
     db.close(); 
     DiaryItems diary = new DiaryItems(); 
     try { 
      for (int i = 0; i < arr.length(); i++) { 
       JSONObject c = arr.getJSONObject(i); 
       String ass_id = c.getString(TAG_ASSID); 
       String time = c.getString(TAG_TIME); 
       String cname = c.getString(TAG_CNAME); 
       String cno = c.getString(TAG_CNO); 
       String type = c.getString(TAG_TYPE); 
       String complete = c.getString(TAG_COMPLETE); 
       System.out.println("ASS ID: " + ass_id); //works - prints ass_id 1->10 
       diary.setAss_id(ass_id); 
       diary.setTime(time); 
       diary.setCname(cname); 
       diary.setCno(cno); 
       diary.setType(type); 
       diary.setComplete(complete); 
       diaryList.add(diary); 
      } 
      for (int j = 0; j < diaryList.size(); j++) { 
       System.out.println("ASSIGN ID: " + diaryList.get(j).getAss_id()); 
       //this prints this correct size of items, but the array only contains 
       //the values of the last item parsed in the JSON 
      } 

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

    @Override 
    protected void onPostExecute(JSONArray array) { 
     if (dialog.isShowing()) { 
      System.out.println("Dismissed dialog"); 
      dialog.dismiss(); 
     } 
     if (diaryList != null) { 
      DiaryListAdapter adapter = new DiaryListAdapter(getActivity(), diaryList); 
      getListView().setAdapter(adapter); 
     } 

    } 
} 
+1

Вы создали экземпляр объекта дневника вне цикла так, в конечном счете, тот же экземпляр создается в каждой итерации – SacJn

ответ

1

Вы добавляете те же DiaryItems экземпляра несколько раз в List. Вы должны создать новый экземпляр DiaryItems на каждой итерации цикла.

Изменить

DiaryItems diary = new DiaryItems(); 
    try { 
     for (int i = 0; i < arr.length(); i++) { 
      .... 

в

try { 
     for (int i = 0; i < arr.length(); i++) { 
      DiaryItems diary = new DiaryItems(); 
      ... 
+0

я заслуживаю downvotes за эту ошибку ..... Большое спасибо за помощь. – mhorgan

2

Вы конкретизированная DiaryItems diary = new DiaryItems(); за пределы вашего цикла. Создайте его внутри циклов, и вы не будете добавлять его каждый раз, когда цикл завершается. Попробуйте:

for (int i = 0; i < arr.length(); i++) { 
    DiaryItems diary = new DiaryItems(); 
    ..do stuff 
} 

вместо:

DiaryItems diary = new DiaryItems(); 
     try { 
      for (int i = 0; i < arr.length(); i++) { 
       JSONObject c = arr.getJSONObject(i); 
Смежные вопросы