3

私のデータベースでは、エントリごとに、携帯電話の写真への uri が 1 つあります。電話で表示するには、Listview 用の CustomAdapter があります。ここで、ListView に画像を表示して、次のエラー メッセージを取得したいと考えています。

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

4

1 に答える 1

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, egenaures, imageUri , kindid);

于 2013-05-13T13:39:29.287 に答える