0

我有一个 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/setter。

但是,当我运行前面的代码时,结果具有以下值:

result.getAirportCode: AUS
result.getLat: 97.67
result.getLon: null

纬度值错误,经度为空。

我在这里做任何明显错误的事情吗?如果没有,我还可以提供哪些其他信息?

4

2 回答 2

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)));
于 2012-10-22T00:15:45.983 回答
0

问题可能是列索引并不总是与您的 select 语句的顺序相同。从游标中提取数据时,您应该调用getColumnIndex并将返回值传递给 getDouble 调用。

于 2012-10-22T00:06:28.403 回答