【问题标题】:How can I store an ArrayList<GeoPoint> in SQLite?如何在 SQLite 中存储 ArrayList<GeoPoint>?
【发布时间】:2011-05-01 20:13:54
【问题描述】:

首先,我以前从未使用过数据库。在阅读了多篇文章后,将我的程序收集的数据存储在 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);

这会导致致命异常。我想,最后,我想在我的行中有一个列来承载承载地理点的表的名称。有谁知道更简单的方法,或者可以看到代码的问题。

【问题讨论】:

    标签: android sqlite arraylist


    【解决方案1】:
    while (i.hasNext()) {
        db.insertGeopoints(i.next().getLongitudeE6(), i.next()
                .getLatitudeE6(), routeName);
    

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

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

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

    【讨论】:

    • 我认为 i.next() 应该每次迭代调用一次。
    • 哇,我什至没有注意到我在循环中调用了两次 .next()。谢谢 Piotr 和 Gonzo。现在我有一张表,其中存储使用的汽油、总距离、路线名称、地理点数组列表和街道名称数组列表。最终,我希望能够对数据进行一些路线比较。我的失败一直是存储两个数组列表。我正在创建一个新表,希望可以轻松地从当前路由表链接到它,以便我可以存储所有地理点和街道名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2011-12-09
    • 1970-01-01
    • 2013-12-19
    • 2012-10-11
    • 2018-06-13
    • 2021-08-31
    相关资源
    最近更新 更多