2012-02-06 4 views
0

Я хочу отображать изображения, хранящиеся в моей базе данных, однако моя программа бросает исключение (CursorIndexOutOfBoundsException: запрошенный индекс -1 с размером 100). Я использую this, и в этом уроке мне удалось вставить изображения в базу данных, но проблема их устранения. Пытаясь найти ответы от google и StackOverflow, я также сталкиваюсь с следующими вопросами. Qustion1 Qustion2. Однако эти вопросы не помогают моему делу. Любая помощь была бы признательна.Как отображать изображения из базы данных

Ниже приведен мой код.

db = helper.getWritableDatabase();  
    //select the data 
    //while(cursor.moveToFirst()); 
    cursor = db.query(DBHelper.TABLE, new String[] {DBHelper.C_PHOTOS }, 
       null, null, null, null, null); 

    //get it as a ByteArray 
    byte[] imageByteArray=cursor.getBlob(1); 
    //the cursor is not needed anymore 
    cursor.close(); 

    //convert it back to an image 
    ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray); 
    Bitmap theImage = BitmapFactory.decodeStream(imageStream); 

Вот Clase, который вставляет изображения

 URL url = new URL("myurl"); 
      URLConnection ucon = url.openConnection(); 
      InputStream is = ucon.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is,128); 
      ByteArrayBuffer baf = new ByteArrayBuffer(128); 
      int current = 0; 
      while ((current = bis.read()) != -1) { 
        baf.append((byte) current); 
      } 
      ContentValues v = new ContentValues();   
      v.put(DBHelper.C_PHOTOS,baf.toByteArray()); 
      v.put(DBHelper.C_PHOTOS, photoThumbnailUrl); 
      db.insert(DBHelper.TABLE, null, v); 

Заранее спасибо

+1

Возможно, вам лучше посмотреть на сохранение только пути изображения в базе данных. Затем сохраните изображение в папке с изображениями. – NeverPhased

+0

Привет, эти изображения поступают из Интернета, а не в любую папку. – SomCollection

ответ

1

Попробуйте это:

byte[] imageByteArray = cursor.getBlob(cursor.getColumnIndex(DBHelper.C_PHOTOS)); 
+0

@ Brain, спасибо за ур ответить, однако это не остановило исключение, я в настоящее время получаю это (02-06 23: 09: 50.057: E/AndroidRuntime (2384): java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.guid/com.guid.Image}: android.database.CursorIndexOutOfBoundsException: запрошенный индекс -1 с размером 220) из LogCat. – SomCollection

+0

Подождите ... вы закомментировали свой 'cursor.movetoFirst()'. Попробуйте поставить его перед 'getBlob()'. –

+0

@ Brain, спасибо за ваш острый глаз и опыт, это с перемещением курсора, чтобы вначале остановить исключение. – SomCollection

0

Перед тем, как получить что-нибудь от курсора, я довольно уверен, что вам нужно установить позицию курсора с помощью moveToFirst(). Это объясняет, почему он считает, что его индекс равен -1. Курсор еще не установлен в начало списка запрошенных строк.

Также ответ Брайана Дюпюя описывает гораздо лучший (и более безопасный) способ получить столбец строк, через getColumnIndex().

+0

, многие thnaks проблема теперь отсортирована. – SomCollection

Смежные вопросы