2013-06-28 97 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