我正在尝试从我的数据库中的表中获取整个列,并将所有条目存储到String数组中。下面是我的代码:
public Cursor fetchAllBarcodeEntries(){
return db.query(BARCODE_TABLE, new String[] {KEY_BARCODE_ID, KEY_BARCODE_NUMBER, KEY_BARCODE_PRODUCT, KEY_BARCODE_PRODUCT_DESC}, null, null, null, null, null);
}
我正在调用并使用这样的函数:
Cursor c = dbAdapter.fetchAllBarcodeEntries();
for(int i = 0; i < c.getCount(); i++){
stringArray[i] = c.getString(c.getColumnIndex(dbAdapter.KEY_BARCODE_PRODUCT);
}
这是我正在获取的错误日志的一部分
01-26 23:15:02.434: E/AndroidRuntime(787): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
任何帮助都会非常感激......
答案 0 :(得分:2)
答案是here
ArrayList<String> columnArray1 = new ArrayList<String>();
ArrayList<String> columnArray2 = new ArrayList<String>();
ArrayList<String> columnArray3 = new ArrayList<String>();
if(mCursor.moveToFirst()!=null){
do{
columnArray1.add(mCursor.getString(COLUM_INDEX1));
columnArray2.add(mCursor.getString(COLUM_INDEX2));
columnArray3.add(mCursor.getString(COLUM_INDEX3));
} while (mCursor.moveToNext()!=null);
}
之后,您可以将ArrayList转换为String数组:
String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);
答案 1 :(得分:1)
您应该检查c.getColumnIndex()的返回值。它可能返回-1,因为该表中不存在给定列(dbAdapter.KEY_BARCODE_PRODUCT),可能是由于数据库出错。
此外,Toast.LENGTH_SHORT在那里做什么? 您发布的代码似乎缺少某些内容......
答案 2 :(得分:1)
您可以尝试以下内容:
Cursor c = dbAdapter.fetchAllBarcodeEntries();
int columnCnt = c.getColumnCount ();
String[] stringArray = new String[columnCnt];
c.moveTofirst();
for(int i = 0; i < columnCnt ; i++){
stringArray[i] = c.getString(i);
}
注意:我没有IDE方便,可能存在语法错误。