0

SQLite データベースを実装していますが、一部の列の値が null である理由がわかりません。これが、SQLiteDatabase(db) に書き込んでいる場所です。ArrayList には確実に車両のリストがあり、各車両には確実に正しい値 (車両 ID、住所、都市、州など) があります。データベース内のテーブルには、私が構築した列もあります(これもチェックしました)。

何らかの理由で、cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CITY)) のような呼び出しを行っているときに null になっていますが、同じ呼び出しを KEY_LAT に対して行うと機能します。(車両 ID、緯度と経度は機能しますが、その他は機能しません)。

public static void addVehicle(ArrayList<Vehicle> aList) {

        Database.openWritable();
        ContentValues values = new ContentValues();
        for(Vehicle vehicle : aList){

        values.put(KEY_VEHICLE_ID, vehicle.getvehicleID());  
        values.put(KEY_ADDRESS, vehicle.getaddress());
        values.put(KEY_CITY, vehicle.getcity());
        values.put(KEY_STATE, vehicle.getstate());

        values.put(KEY_LAT, vehicle.getLat());
    values.put(KEY_LON, vehicle.getLon());

        db.insert(TABLE_VEHICLE, null, values);
           }
    }

追加情報/質問 この do ループは何百回も発生していますが、行数が 14 (データベースには 14 台の車両があります) の場合にのみ発生するはずだと感じています。これは何かに影響している可能性がありますか?しかし、そうではないと思います。では、なぜこれが起こっているのですか?:

    String query = "SELECT * FROM " + DatabaseHandler.TABLE_VEHICLE;
    Cursor cursor = Database.listOfVehiclesDesired(query);

    String lat = "";
    String lon = "";
    String title = "";
    String snippet = "";


    if(cursor.moveToFirst()){
        do {

            lat = (cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_LAT)));
            lon = (cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_LON)));
            title = cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_VEHICLE_ID)) + " " +  cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_VEHICLE_NAME));
            snippet = "City:" + cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CITY)) + ", State: " + cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_STATE));
            addMarkers(new LatLng(lat, lon), true, R.drawable.cap, title, snippet);
        } while (cursor.moveToNext());
    }
    if (cursor != null && !cursor.isClosed()) {
        cursor.close();
    }

余分な (?) 背景情報: SQLiteDatabase にアクセスするために静的クラスを使用しています。また、列インデックスを取得するこのコードなどは AsyncTask にあります。

4

1 に答える 1

0

カーソルが閉じている場合、カーソルを閉じる方法は?!! あなたのコード:

   if (cursor != null && !cursor.isClosed()) {
    cursor.close();

cursor.close(); だけでコードを試してください。

于 2013-06-28T17:51:08.167 に答える