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 にあります。