回答編集履歴

1 誤記修正

dodox86

dodox86 score 3368

2018/04/26 11:37  投稿

SQLite3は関係無いはずで、DBUtilクラスのメソッド中に問題があるようです。
こうではないかと。
SQLite3は関係無いはずで、DBUtilクラスのメソッド中に問題があるようです。こうではないかと。
```Java
//ここではなく       MessageBean messageBean = new MessageBean();
       Cursor cursor = db.rawQuery(sql.toString(), null);
       while (cursor.moveToNext()) {
      // ここでインスタンス生成
         MessageBean messageBean = new MessageBean();
           messageBean.setMessage(cursor.getString(0));
           messageBean.setSpeakerType(cursor.getString(1));
           messageBean.setDate(cursor.getString(2));
           messageList.add(messageBean);
       }
```
最初のコードですと、`MessageBean`クラスのインスタンスは`while`ループ外で1回だけインスタンスを
生成しているだけです。その参照を`messageList`に何回も`add`していることになるので、結局最後のcursorの値を参照することになってます。
最初のご提示のコードですと、`MessageBean`クラスのインスタンスは`while`ループ外で1回だけ生成しています。その参照を`messageList`に何回も`add`していることになるので、結局最後のcursorの値を参照することになってます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る