2013-05-13 60 views
1

在我的數據庫中,我有每個條目一個uri到我的手機上的圖片。要在手機上顯示它,Listview有一個CustomAdapter。現在,我想顯示在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 

有人知道這個錯誤嗎?

編輯: 這裏是代碼,我添加圖像:

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 2013-05-13 10:46:43

+0

我試過,但沒有,我不需要它 – user896692 2013-05-13 10:53:26

+0

然後我認爲它是與圖像路徑的東西。它清楚地表明沒有這樣的文件。你的形象在哪裏? – nikmin 2013-05-13 11:03:55

回答

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而不做任何修改。

我不知道還能說什麼。解決方案很明顯。

編輯:

這裏是你如何設置文件名時間戳:

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 2013-05-13 13:45:15

+0

你添加了什麼編碼路徑?你在哪裏添加它?試試這個:'BitmapDrawable b = new BitmapDrawable(Environment.getExternalStorageDirectory()。getAbsolutePath()+「/ DCIM/Camera /」+「filename.jpg」);'其中filename.jpg是某個現有圖像的名稱 – nikmin 2013-05-13 13:49:28

+0

我加了這個:/storage/emulated/0/DCIM/Camera/1368438768752.jpg – user896692 2013-05-13 14:12:44

相關問題