Как я могу сохранить ArrayList <GeoPoint>в SQLite? - PullRequest
1 голос
/ 02 мая 2011

Прежде всего, я никогда раньше не работал с базами данных.После прочтения нескольких постов было неплохо сохранить данные, которые моя программа собирает, в базе данных SQLite.На данный момент моя проблема связана с хранением ArrayList GeoPoints.Я знаю, что это не может быть сохранено в базе данных 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 Ответ

1 голос
/ 02 мая 2011
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)"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...