2013-06-28 74 views
0

我正在实现一个SQLite数据库,我找不出为什么某些列值为空。这是我写入我的SQLiteDatabase(db)的地方。 ArrayList DEFINITELY具有车辆列表,并且每辆车肯定具有正确的值(车辆ID,地址,城市,州......)。数据库中的表格也有我构建的列(我也检查过)。获取空的SQLite数据库值

由于某种原因,当我正在做一个像cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CITY))这样的调用时,它会变空,但是当我对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); 
      } 
    } 

其他信息/有人对此做循环正在发生的事情就像数百次,我觉得它应该只针对发生的数我有行,这是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(); 
    } 

多余背景INFROMATION:我使用一个静态类访问SQLiteDatabase,另外,得到列索引和这样的这个代码是在的AsyncTask。

+1

创建表时,可以为表的每列设置列约束'not null'。 'addVehicle()'将失败,然后插入空值。所以你可以检查这是不是问题 –

+0

这是一个正确的说法吗? “CREATE TABLE”+ TABLE_VEHICLE +“(”+ KEY_VEHICLE_ID +“TEXT NOT NULL,”+ ...重复。我不相信它失败 – benzabill

+0

这应该工作 –

回答

0

如果光标关闭,你如何关闭光标? 你的代码:

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

试试只有cursor.close()的代码;

+1

我认为代码是说如果它没有关闭,那么它应该关闭。 我试过了你说的方式,它没有解决问题:( – benzabill

+0

也许你应该添加return;方法后cursor.close();返回somethengs – H4F

+1

它是在一个无效的方法。问题是更高的我beli前夕 – benzabill