我试图在一个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;
}
答案 0 :(得分:2)
您的cursorToInfo()
仅检索第一列值,丢弃游标中的任何其他可能列。 Java对象字段默认初始化为零/空,这样就解释了为什么未明确设置的字段为零。