Android SQLite存储lat和long为0

时间:2014-04-26 17:59:40

标签: android sqlite

我试图在一个Android应用程序的SQLite数据库中存储纬度和经度的位置。我可以存储位置名称,位置地址,SSID和密码,但纬度和经度似乎始终存储为0。

我知道它正在尝试正确地将值写入数据库,但在该阶段和检索它们之间并不正确。

这是我的表的定义,我使用REAL数据类型来治疗lat和long - 这是正确的吗?

private static final String DATABASE_CREATE = "create table "
        + INFO_TABLE + " (" + COLUMN_NAME + " TEXT PRIMARY KEY NOT NULL, "
        + COLUMN_ADDRESS + " TEXT, "
        + COLUMN_LAT + " REAL, "
        + COLUMN_LONG + " REAL, "
        + COLUMN_SSID + " TEXT, "
        + COLUMN_PASSWORD + " TEXT);";

此时输入数据的部分"值"是一个包含正确lat和long的列表:

public Info enterInfo(String name, String address, double lat, double lng, String ssid, String password){
    ContentValues values = new ContentValues();
    values.put(SQLiteHelper.COLUMN_NAME, name);
    values.put(SQLiteHelper.COLUMN_ADDRESS, address);
    values.put(SQLiteHelper.COLUMN_LAT, lat);
    values.put(SQLiteHelper.COLUMN_LONG, lng);
    values.put(SQLiteHelper.COLUMN_SSID, ssid);
    values.put(SQLiteHelper.COLUMN_PASSWORD, password);

    long insertId = database.insert(SQLiteHelper.INFO_TABLE, null, values);
}

最后,这是通过从数据库读取创建列表的位置,这里的值为0:

public List<Info> getAllInfo(){
    List<Info> infos = new ArrayList<Info>();

    Cursor cursor = database.query(SQLiteHelper.INFO_TABLE, allColumns, null,null,null,null,null);

    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        Info info = cursorToInfo(cursor);
        infos.add(info);
        cursor.moveToNext();
    }
    //Close the cursor
    cursor.close();
    return infos;
}

不确定是否因为while(!cursor.isAfterLast())可能会从循环中提前到来?还是cursorToInfo中的toString? cursorToInfo(cursor)的代码是:

private Info cursorToInfo(Cursor cursor){
    Info info = new Info();
    info.setName(cursor.getString(0));
    return info;
}

1 个答案:

答案 0 :(得分:2)

您的cursorToInfo()仅检索第一列值,丢弃游标中的任何其他可能列。 Java对象字段默认初始化为零/空,这样就解释了为什么未明确设置的字段为零。