【发布时间】:2014-04-26 17:59:40
【问题描述】:
我正在尝试在 SQLite 数据库中为 Android 应用程序存储经纬度位置。我可以存储位置名称、位置地址、SSID 和密码,但纬度和经度似乎总是存储为 0。
我知道它正在尝试将值正确写入数据库,但在该阶段和检索它们之间有些不正确。
这是我的表格的定义,我使用 REAL 数据类型来区分经纬度 - 这是正确的吗?
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);";
输入数据的部分,此时“值”是一个包含正确纬度和经度的列表:
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;
}
【问题讨论】: