获取Null SQLite数据库值

时间:2013-06-28 17:02:44

标签: android sqlite

我正在实现一个SQLite数据库,我无法弄清楚为什么有些列值为null。这是我写入SQLiteDatabase(db)的地方。 ArrayList DEFINITELY具有车辆列表,每辆车DEFINITELY都有正确的值(车辆ID,地址,城市,州......)。数据库里面的表也有我构建的列(我也检查过这个)。

出于某种原因,当我正在进行像cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CITY)这样的调用时,它会变为null,但是当我执行相同的调用但是对KEY_LAT时,它会起作用。 (车辆ID,Lat和Lon工作,但其他人没有)..

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);
           }
    }

附加信息/问题这个循环发生了数百次,我觉得它应该只发生在我拥有的行数,即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中。

1 个答案:

答案 0 :(得分:0)

如果光标关闭,你如何关闭光标?!! 你编码:

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

使用cursor.close();

尝试代码