0

私は次のような値を持つSQLiteデータベースを持っています:

_id, airportcode, lat, lan
1, AUS, 31.0672, 97.8289
...

SQLiteDatabaseブラウザでデータベースを開いて実行すると、次のようになります。

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は単なるゲッター/セッターです。

ただし、前のコードを実行すると、結果は次の値になります。

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

緯度の値が間違っており、経度が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 に答える