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.get(i),我从 0 开始一直到 waypoints.size())时,数组的所有元素都具有相同的值(最后的值在 getData()) 中添加的 wps 元素。

4

1 回答 1

2

这里有两个问题。

  • 就像Mocialov所说,您不会为每个项目移动光标。
  • 您一遍又一遍地添加相同的对象。您需要new Wp()在循环内部创建一个,以便列表中的每个元素都不会指向同一事物。

像这样的东西:

    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 回答