2013-05-13 5 views
1

В моей базе данных У меня есть для каждой записи один uri для изображения на мобильном телефоне. Чтобы отобразить его на телефоне, есть CustomAdapter для Listview. Теперь я хочу, чтобы отобразить изображение в ListView и получить следующее сообщение об ошибке:Невозможно декодировать поток: FileNotFoundException

05-13 12:20:34.234: E/BitmapFactory(17684): Unable to decode stream: java.io.FileNotFoundException: /external/images/media/10139: open failed: ENOENT (No such file or directory) 
BitmapDrawable: cannot decode external/images/media/10139 

Это происходит в этой функции:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolderEreignis holder; 

    if(convertView == null){ 
     convertView = inflator.inflate(R.layout.list_ereignis, parent, false); 
     holder = new ViewHolderEreignis((TextView) convertView.findViewById(R.id.enullline), (TextView) convertView.findViewById(R.id.efirstLine), (ImageView) convertView.findViewById(R.id.eimgv)); 

     convertView.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolderEreignis) convertView.getTag(); 
    } 

    Ereignis ki = (Ereignis) getItem(position); 
    holder.getEreignisname().setText(ki.getEreignisname()); 
    holder.getEreignisdatum().setText(ki.getEreignisZeit()); 
    Uri uri = Uri.parse(ki.getEreignisbild()); 
    BitmapDrawable b = new BitmapDrawable(ki.getEreignisbild()); 

    System.out.println("ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ" + uri.getPath()); 
    holder.getEreignisbild().setImageDrawable(b); 

    return convertView; 

} 

Как вы видите, я вывожу URI изображения, которое выглядит следующим образом:

external/images/media/10139 

Кто-нибудь знает об этой ошибке?

EDIT: Вот код, где я добавить изображение:

ContentValues values = new ContentValues(); 
    String TITLE = null; 
    values.put(MediaStore.Images.Media.TITLE, TITLE); 
    String DESCRIPTION = null; 
    values.put(MediaStore.Images.Media.DESCRIPTION, DESCRIPTION); 
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
    System.out.println("VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVvv" + imageUri.getPath()); 
    startActivityForResult(intent, IMAGE_CAPTURE); 

EDIT2:

Вот код, как добавить ссылку на базу данных:

public void insertereignis(String ename, String ezeit, String egenaueres, String ebild, int kindid){ 
     long rowId = -1; 
     try{  
      SQLiteDatabase db = getWritableDatabase(); 


      ContentValues cv = new ContentValues(); 
      System.out.println(ename + ezeit + egenaueres); 
      cv.put(EREIGNISNAME, ename); 
      cv.put(EREIGNISZEIT, ezeit); 
      cv.put(EREIGNISGENAUERES, egenaueres); 
      cv.put(EREIGNISBILD, ebild); 
      System.out.println("GRIAISDALSDJLASJDLKASJDKLAJSDLKJFS" + ebild); 
      cv.put(KINDID, kindid); 

      rowId = db.insert(TABLE_NAME_EREIGNIS, null, cv);   
     } 
     catch (SQLiteException e){ 
      Log.e(TAG, "insert() Ereignis", e); 
     } 
     finally{ 
      Log.d(TAG, "insert(): Ereignis rowId=" + rowId); 
     } 
    } 

Значение ebild: /external/images/media/10146

+0

Вам не нужно расширение файла? Как '10139.jpg' или что-то еще? – nikmin

+0

Я пробовал это, но нет, мне это не нужно – user896692

+0

, тогда я думаю, что это что-то с пути изображения. В нем четко сказано, что такого файла нет. Где находится ваше изображение? – nikmin

ответ

0

Разве вы не видите проблему? У вас много решений.

  1. Изменение ebild иметь значение в формате /DCIM/Camera/filename.jpg, а затем использовать imgeUri так:

    imageUri = Environment.getExternalStorageDirectory().getAbsolutePath() + uri.toString(); 
    
  2. Изменение ebild иметь значение в формате filename.jpg, а затем использовать imgeUri так:

    imageUri = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/" + uri.toString(); 
    
  3. Назначить весь путь изображения до ebild например:

    ebild = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/" + "filename.jpg" 
    

    , а затем использовать его как изображение uri без каких-либо изменений.

Я не знаю, что еще сказать. Решение очевидно.

EDIT:

Вот как вы можете установить имя файла в качестве временной метки:

Calendar c = Calendar.getInstance(); 
String cameraImageFileName = "IMG_" + c.get(Calendar.YEAR) + "-" + 
       ((c.get(Calendar.MONTH)+1 < 10) ? ("0" + (c.get(Calendar.MONTH)+1)) : (c.get(Calendar.MONTH)+1)) + "-" + 
       ((c.get(Calendar.DAY_OF_MONTH) < 10) ? ("0" + c.get(Calendar.DAY_OF_MONTH)) : c.get(Calendar.DAY_OF_MONTH)) + "_" + 
       ((c.get(Calendar.HOUR_OF_DAY) < 10) ? ("0" + c.get(Calendar.HOUR_OF_DAY)) : c.get(Calendar.HOUR_OF_DAY)) + "-" + 
       ((c.get(Calendar.MINUTE) < 10) ? ("0" + c.get(Calendar.MINUTE)) : c.get(Calendar.MINUTE)) + "-" + 
       ((c.get(Calendar.SECOND) < 10) ? ("0" + c.get(Calendar.SECOND)) : c.get(Calendar.SECOND)) + ".jpg"; 

Вы получите имя файла в формате IMG_YYYY-MM-DD_HH-MM-SS.jpg

и ваш imageUri будет:

imageUri = Environment.getExternalStorageDirectory().getAbsolutePath() + cameraImageFileName; 

и вы должны добавить это как ebild в базе данных:

insertereignis (ENAME, ezeit, egenaueres, imageUri, kindid);

+0

нет, должна быть другая проблема. Я добавил жесткий путь к файлу, и он тоже не показан! – user896692

+0

Какой штрих-код вы добавили? где вы его добавили? попробуйте следующее: «BitmapDrawable b = new BitmapDrawable (Environment.getExternalStorageDirectory(). getAbsolutePath() +»/DCIM/Camera/«+» filename.jpg »);' где filename.jpg - это имя какого-либо существующего изображения – nikmin

+0

Я добавил это : /storage/emulated/0/DCIM/Camera/1368438768752.jpg – user896692

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