首先,我以前从未使用过数据库。通过阅读多篇文章后,将我的程序收集的数据存储在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);
这会导致致命的异常。我想,最后,我想在我的行中有一个列,其中包含托管地理位置的表的名称。有没有人知道更简单的方法,或者可能会看到代码的问题。
答案 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)"