2015-06-27 22 views
0

我已經編寫了一個程序,在兩個自動完成文本視圖中自動設置文本,基於選擇單個自動完成文本視圖,但獲取錯誤。 E/CursorWindow(7974):無法從具有2行3列的CursorWindow讀取第0行第-1列。根據另一個自動完成文本視圖的選擇自動設置文本

cursor = listHelper.getVehicleData(); 
       int[] vehicleNoTo = new int[] { android.R.id.text1 }; 
       String[] vehicleNoFrom = new String[] { 
       DbListHelper.REGISTRATION_NO }; 
       SimpleCursorAdapter driverAdapter = new 
       SimpleCursorAdapter(getBaseContext(), 
         android.R.layout.simple_list_item_1, cursor, 
         vehicleNoFrom, vehicleNoTo); 

       driverAdapter.setCursorToStringConverter(new 
       CursorToStringConverter() 
       { 
        public CharSequence convertToString(Cursor cur) 
         { 
         int index = 
         cur.getColumnIndex(DbListHelper.REGISTRATION_NO); 
         return cur.getString(index); 
          } 
        }); 

       editVehicleNo1.setAdapter(driverAdapter); 
       editVehicleNo1.setThreshold(1); 
       driverAdapter.notifyDataSetChanged(); 

上面的代碼完全適用於一個autocompletetextview - 表示登記號的車輛,當我開始輸入。

但我想要的是,當我選擇任何車輛時,驅動程序名稱(自動完成)和驅動程序代碼(自動完成)應該設置。

所以,我對於上述邏輯編寫的,但在這裏得到一個錯誤:

editVehicleNo1.addTextChangedListener(new TextWatcher() { 

        @Override 
        public void onTextChanged(CharSequence s, int start, int 
        before, int count) { 


        } 

        @Override 
        public void beforeTextChanged(CharSequence s, int start, 
          int count, 
          int after) { 


        } 

        @Override 
        public void afterTextChanged(Editable s) { 
         driverName1 =cursor.getString(cursor.getColumnIndex 
            (DbListHelper.DRIVER_NAME)); 
         driverCode1 = cursor.getString(cursor.getColumnIndex 
             (DbListHelper.DRIVER_CODE)); 
         editDriverName.setText(driverName1); 
         editDriverCode.setText(driverCode1); 

        } 
       }); 

SqliteHelper.java車輛數據庫

public long insertVehicleData(String vehicle_code,String 
    registration_no,String driver_code,String driver_name) { 
    SQLiteDatabase db = helper.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(DbListHelper.VEHICLE_CODE, vehicle_code); 
    values.put(DbListHelper.REGISTRATION_NO, registration_no); 
    values.put(DbListHelper.DRIVER_CODE, driver_code); 
    values.put(DbListHelper.DRIVER_NAME, driver_name); 
    long id = db.insert(DbListHelper.TABLE_NAME_VEHICLE, null, values); 
    return id; 
} 

public Cursor getVehicleData(){ 

    SQLiteDatabase db = helper.getWritableDatabase(); 
    String[] columns = { 
    DbListHelper.UID,DbListHelper.VEHICLE_CODE,DbListHelper.REGISTRATION_NO 
      ,DbListHelper.DRIVER_CODE,DbListHelper.DRIVER_NAME}; 
    Cursor cursor = db.query(DbListHelper.TABLE_NAME_VEHICLE, columns, null, 
        null, null, null, null); 
    StringBuffer buffer = new StringBuffer(); 
    while (cursor.moveToNext()) { 
     int index0 = cursor.getColumnIndex(DbListHelper.UID); 
     String cid0 = cursor.getString(index0); 
     int index1 = cursor.getColumnIndex(DbListHelper.VEHICLE_CODE); 
     String cid1 = cursor.getString(index1); 
     int index2 = cursor.getColumnIndex(DbListHelper.REGISTRATION_NO); 
     String cid2 = cursor.getString(index2); 
     int index3 = cursor.getColumnIndex(DbListHelper.DRIVER_CODE); 
     String cid3 = cursor.getString(index3); 
     int index4 = cursor.getColumnIndex(DbListHelper.DRIVER_NAME); 
     String cid4 = cursor.getString(index4); 

     buffer.append(cid0 + " " + cid1 + " " + cid2 + " " + cid3 + " " + 
     cid4 + "\n"); 
    } 
    return cursor; 

} 
+0

什麼是editDriverName&editDriverCode?你究竟想達到什麼目的? – pskink

+0

@pskink editDriverName和editDriverCode是autocompletetextview,而editVehicleNo1也是autocompletetextview,當我開始在editvehicleno1中輸入時,下拉菜單有一個車輛號列表,所以當我選擇任何車輛號時,我想要的是驅動程序名稱和驅動程序代碼應該自動填寫 –

+0

我沒有明白它:爲什麼你設置它們,但後來他們可以改變?還有什麼'StringBuffer buffer = new StringBuffer();'用於? – pskink

回答

0

的插入和選擇替換的getVechileData() while循環SqliteHelper.java

while (cursor.moveToNext()) { 
     int index0 = cursor.getColumnIndex(DbListHelper.UID); 
     String cid0 = cursor.getString(index0); 
     //Your code............. 
    } 

if (cursor.moveToFirst()) { 
     do { 
       int index0 = cursor.getColumnIndex(DbListHelper.UID); 
       String cid0 = cursor.getString(index0); 
       //Your code...... 
      } while (cursor.moveToNext()); 
    } 

cursor.moveToFirst()必須在查詢後調用它,如果數據庫中有任何記錄,它將返回,否則返回false。

onTextChanged()中,您無法直接從光標處獲取值,先調用cursor.moveToFirst(),然後再獲取值。

@Override 
public void afterTextChanged(Editable s) { 
     if (cursor.moveToFirst(
      driverName1 =cursor.getString(cursor.getColumnIndex (DbListHelper.DRIVER_NAME)); 
      } 
    } 
+0

得到相同的錯誤先生 –

+0

@narahari_arjun更新我的回答看看 – Kartheek

+0

' while(cursor.moveToNext())'完全**好**,不要使簡單的事情變得複雜 – pskink

相關問題