2012-02-16 111 views
0

我在做Android應用程序具有此數據庫從SQL一個ListView:添加圖像使用資產文件夾的圖片

public void onCreate(SQLiteDatabase db) { 
    String sql = "CREATE TABLE IF NOT EXISTS snacks (" + 
       "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "name TEXT, " + 
       "disc TEXT, " + 
       "photo TEXT, " + 
       "thumb TEXT, " + 
       "ingre TEXT, " + 
       "howto TEXT, " + 
       "info TEXT, " + 
       "snackId INTEGER)"; 
    db.execSQL(sql); 

    ContentValues values = new ContentValues(); 

    values.put("name", "Name 1"); 
    values.put("disc", "here is the description"); 
    values.put("photo", "stub.png"); 
    values.put("thumb", "stub.png"); 
    values.put("ingre", "the ingredients of the snack"); 
    values.put("howto", "how to make this thing"); 
    values.put("info", "basically its this much calorie and such and such"); 
    db.insert("snacks", "name", values);...............etc etc ......` 

在我的活動之一,我有一個可以查詢數據庫搜索欄。結果顯示在列表視圖中。當我點擊列表中的一個項目時,我會得到它的詳細信息,包括照片。 我的照片位於資源文件夾中。我想從資產文件夾中檢索照片並顯示它的縮略圖。我嘗試使用資產經理這樣

public void search(View view) { 
    cursor = db.rawQuery("SELECT _id, name, disc, thumb FROM snacks WHERE name LIKE ?", new String[]{"%" + searchText.getText().toString() + "%"}); 

    adapter = new SimpleCursorAdapter(
    this, 
    R.layout.cook_tab_snackslist, 
    cursor, 
    new String[] {"name", "disc"},   
    new int[] {R.id.name, R.id.disc}); 

    Thumb = (ImageView) findViewById(R.id.thumb); 
    try { 
    InputStream bitmap=getAssets().open(cursor.getString(cursor.getColumnIndexOrThrow("thumb"))); 
    Bitmap bit=BitmapFactory.decodeStream(bitmap); 
    Thumb.setImageBitmap(bit); 
    } catch (IOException e1) { 
    e1.printStackTrace(); 
    } 
    setListAdapter(adapter); 
} 

我知道這是不正確的,我發現了以下錯誤:

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 7 

我能做些什麼?我甚至會以正確的方式去解決這個問題嗎?

+0

答案從slukian是正確的。爲了擴展它 - 查詢返回的遊標位置在第一條記錄之前設置爲'之前'。由於遊標的第一條記錄的'索引'爲0,因此光標位置爲-1是有意義的。正如slukian所說,你需要通過調用moveToFirst或簡單的moveToNext來移動光標位置。 – Squonk 2012-02-16 19:59:15

+0

現在,當我搜索不存在的東西時,應用程序崩潰並出現此錯誤: .CursorIndexOutOfBoundsException:請求索引0,大小爲0 ...任何想法? – FirstLaw 2012-02-19 18:05:24

回答

1

你作出查詢後,加入這一行(您也應該檢查之前,爲了確保光標不在):

cursor.moveToFirst(); 
+0

謝謝,它停止了我的錯誤,但沒有任何反應,我似乎無法在列表視圖中顯示圖像... – FirstLaw 2012-02-19 18:02:28

+0

現在,如果我查詢的信件不在我的列表中,該應用程序崩潰錯誤報告,.CursorIndexOutOfBoundsException:請求的索引0,大小爲0 – FirstLaw 2012-02-19 18:04:53

+0

好的,我在修正了新錯誤後讀取: if(cursor.getCount()== 1) { \t cursor.moveToFirst(); 但仍然沒有顯示縮略圖:(幫助! – FirstLaw 2012-02-19 18:27:14

相關問題