我有一个SQLite数据库,其值如下:
_id, airportcode, lat, lan
1, AUS, 31.0672, 97.8289
...
当我在SQLiteDatabase Browser中打开数据库并运行:
SELECT DISTINCT _id, airportcode, lat, lon FROM latlon WHERE airportcode="AUS"
它返回:
1, AUS, 31.0672, 97.8289
在我的Android应用中,我有这个:
public LatLonResult getLatLonFor(String airportCode){
Cursor mCursor = myDataBase.query(
true, DB_TABLE,
new String[] {KEY_ID, KEY_AIRPORTCODE, KEY_LAT, KEY_LON},
String.format("%s=\"%s\"", KEY_AIRPORTCODE, airportCode),
null, null, null, null, null);
LatLonResult result = null;
if (mCursor != null) {
mCursor.moveToFirst();
result = new LatLonResult();
result.setAirportCode(mCursor.getString(
mCursor.getColumnIndexOrThrow(KEY_AIRPORTCODE)));
result.setLat(mCursor.getDouble(
mCursor.getColumnIndexOrThrow(KEY_LAT)));
result.setLat(mCursor.getDouble(
mCursor.getColumnIndexOrThrow(KEY_LON)));
}
return result;
}
LatLonResult只是getter / setters。
但是,当我运行上一个代码时,结果具有以下值:
result.getAirportCode: AUS
result.getLat: 97.67
result.getLon: null
纬度值错误,经度为空。
我在这里做了什么明显错误的事吗?如果没有,我可以提供哪些其他信息?
答案 0 :(得分:1)
在列出的代码中,您有:
result.setLat(mCursor.getDouble(
mCursor.getColumnIndexOrThrow(KEY_LAT)));
result.setLat(mCursor.getDouble( //second call to setLat
mCursor.getColumnIndexOrThrow(KEY_LON)));
我认为这应该是
result.setLat(mCursor.getDouble(
mCursor.getColumnIndexOrThrow(KEY_LAT)));
result.setLon(mCursor.getDouble(
mCursor.getColumnIndexOrThrow(KEY_LON)));
答案 1 :(得分:0)
问题可能是列索引并不总是与您的选择参数的顺序相同。从数据中提取数据时,您应该调用getColumnIndex并将返回值传递给getDouble调用。