如何在SQLite中存储ArrayList <geopoint>?</geopoint>

时间:2011-05-01 20:13:55

标签: android sqlite arraylist

首先,我以前从未使用过数据库。通过阅读多篇文章后,将我的程序收集的数据存储在SQLite数据库中是个好主意。目前,我的问题涉及存储GeoPoints的ArrayList。我知道这不能存储在sqlite数据库中。我已经阅读了其他一些类似的问题,并发现解决方案可能是创建一个单独的表,并将所有点存储在该表的两列中。

在我的数据库适配器中,我写道:

// Make a New GeoPoint Table
public void geopointTable(String routeName)
{
    String GeoTable = "CREATE TABLE " + routeName + "geopoints (_id INTEGER PRIMARY KEY, "
        + "KEY_GEOLONG REAL, "
        + "KEY_GEOLAT REAL);";

    db.execSQL(GeoTable);
}

// Insert into GeoPoint Table
public long insertGeopoints (double longitude, double latitude, String routeName)
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_GEOLONG, longitude);
    initialValues.put(KEY_GEOLAT, latitude);
    return db.insert(routeName + "geopoints", null, initialValues);
}

在我收集地理位置并将它们存储在数组中的主要活动中,我写道:

db.open();

    db.geopointTable(routeName);
    Iterator<GeoPoint> i = points.iterator();
    while (i.hasNext()) {
        db.insertGeopoints(i.next().getLongitudeE6(), i.next()
                .getLatitudeE6(), routeName);

这会导致致命的异常。我想,最后,我想在我的行中有一个列,其中包含托管地理位置的表的名称。有没有人知道更简单的方法,或者可能会看到代码的问题。

1 个答案:

答案 0 :(得分:1)

while (i.hasNext()) {
    db.insertGeopoints(i.next().getLongitudeE6(), i.next()
            .getLatitudeE6(), routeName);

i.next()将迭代器移动到下一个元素,因此对于每次迭代,您将从一个elem插入经度,从下一个插入纬度。如果数组中的元素数是奇数,则会出现OutOfBound异常

关于SQL:您可能应该为所有路由使用一个表:

 CREATE TABLE route (id INTEGER PRIMARY KEY,
   route_name text, 
   KEY_GEOLONG REAL, 
   KEY_GEOLAT REAL)"