2015-03-22 2 views
2

Я использую следующий код для извлечения строк из таблицы. Когда я сначала перебираю группу, первый элемент добавляется в список массивов и показывает точные значения. После второй итерации первый объект был заменен вторым объектом, и теперь есть два повторяющихся элемента. Что может быть причиной этого?Android-массив allList заменяется последним

c.moveToFirst(); 
     ArrayList<BaseModel> userShares = new ArrayList<BaseModel>(); 
     for (int count=0;count<recordCount;count++) { 
      UserShareModel userShareModel = (UserShareModel) model; 
      userShareModel.setUserId(c.getString(c.getColumnIndexOrThrow("userid"))); 
      userShareModel.setType(c.getInt(c.getColumnIndexOrThrow("type"))); 
      userShareModel.setKeyUserShare(c.getString(c.getColumnIndexOrThrow("key_user_share"))); 
      userShareModel.setSecretSeed(c.getString(c.getColumnIndexOrThrow("secret_seed"))); 
      userShareModel.setValueUserShare(c.getString(c.getColumnIndexOrThrow("value_user_share"))); 
      userShareModel.setCreatedAt(c.getString(c.getColumnIndexOrThrow("created_at"))); 
      String updatedAt = c.getString(c.getColumnIndexOrThrow("updated_at")); 
      if (updatedAt != null) { 
       userShareModel.setUpdatedAt(updatedAt); 
      } 
      userShares.add(userShareModel); 
      c.moveToNext(); 
     } 
+0

Где находится модель? –

+0

Внутри этой функции вышеприведенный код написан публичным ArrayList get (модель BaseModel) – Jyothish

+0

Я добавил ответ, но вы, вероятно, не правильно настроили дизайн. Я не вижу, чтобы ваш аргумент 'model' использовался в любом месте метода. –

ответ

0

Вы используете один и тот же экземпляр BaseModel model для заполнения данных в каждой итерации. Таким образом, все ссылки на список массивов указывают на один и тот же объект (тот же объект с данными, которые были обновлены в конце).

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

for (int count=0;count<recordCount;count++) { 
UserShareModel userShareModel = new UserShareModel(); 
//setters 
userShares.add(userShareModel); 
c.moveToNext(); 
} 
+0

Если у вас есть заклинание, у вас есть вежливость, чтобы объяснить причину? Затем можно предпринять дальнейшие действия. Просто downvoting никому не помогает! –

0

Я делаю это нормально, как это:

if (cursor.moveToFirst()) { 
     do { 
      UserShareModel userShareModel = (userShareModel.setUserId(c.getString(0)), .... usw //probably working with getColumnIndexOrThrow("userid"))); 


      userShares.add(userShareModel); 
     } while (cursor.moveToNext()); 
    }