0

arraylist を使用して、次のコードと以下に説明する問題があります。

class WP{
  double id, type;
  String shortname, name;
}

public class GPSAct extends Activity {
... 
public ArrayList<WP> waypoints = new ArrayList<WP>();


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
...
getData(where);

    for(int i=0;i<waypoints.size();i++){
        Toast.makeText(getApplicationContext(), waypoints.get(i).shortname, Toast.LENGTH_LONG).show();

    }
}

public void getData(String where) {

   WP wps = new WP();

        try {
            openDataBase();
            Cursor cur = myDataBase.query(TABLE_WP, null, where, null, null, null, null);
            cur.moveToFirst();

            waypoints.clear();

            for (int i = 0; i < cur.getCount(); i++) {

                wps.id = cur.getDouble(0);
                wps.type = cur.getDouble(0);
                wps.shortname = cur.getString(1);
                wps.name = cur.getString(2);

                waypoints.add(i, wps);

            }
            cur.close();
...

問題は、waypoints arraylist (waypoints.get(i) を使用して、0 から始まり、waypoints.size() まで) にアクセスしようとすると、配列のすべての要素が同じ値 (最後の値の値) を持つことです。 wps 要素が getData() に追加されました)。

4

1 に答える 1

2

ここで2つの問題。

  • Mocialovが言ったように、アイテムごとにカーソルを移動しているわけではありません。
  • 同じオブジェクトを何度も追加しています。new Wp()リスト内のすべての要素が同じものを指していないように、ループ内にa を作成する必要があります。

このようなもの:

    do {
        wps = new Wp();
        wps.id = cur.getDouble(0);
        wps.type = cur.getDouble(0);
        wps.shortname = cur.getString(1);
        wps.name = cur.getString(2);

        waypoints.add(i, wps);
    } while(cur.moveToNext());
于 2013-08-03T21:52:19.873 に答える