【问题标题】:java.io.FileNotFoundException in androidandroid中的java.io.FileNotFoundException
【发布时间】:2012-12-12 19:42:54
【问题描述】:

我正在使用代码从图库中选择一张图片

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery);

    Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(i, SELECT_PICTURE);
}

public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    Bitmap bitmap = null;
    switch (requestCode) {
    case SELECT_PICTURE:
        if (resultCode == RESULT_OK) {
            Uri selectedImage = imageReturnedIntent.getData();
            try {
                bitmap = decodeUri(selectedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            MyApplicationGlobal.bitmap = bitmap;
            MyApplicationGlobal.imageUri = selectedImage.toString();
            Log.v("selectedImage", "selectedImage: " + selectedImage.getPath());

            Intent intentUpload = new Intent(GalleryActivity.this, UploadActivity.class);
            startActivity(intentUpload);
            finish();
        }
    }

然后我尝试通过调用网络服务上传该图像

MultipartEntity reqEntity = new MultipartEntity();
    try {
        reqEntity.addPart("email", new StringBody(email));
        Log.v("in uploadImageUsingMultiPart", "imagePath: " + MyApplicationGlobal.imageUri);
        reqEntity.addPart("name", new FileBody(new File(MyApplicationGlobal.imageUri)));
        reqEntity.addPart("img_desc", new StringBody(img_desc));
        reqEntity.addPart("amount", new StringBody(amount));
        reqEntity.addPart("request_type", new StringBody("INSERT"));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

但我收到错误java.io.FileNotFoundException

原木猫是

 java.io.FileNotFoundException: /content:/media/external/images/media/526 (No such file or directory)
at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239)
at java.io.FileInputStream.<init>(FileInputStream.java:88)
at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:100)
at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206)
at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224)
at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183)
at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:162)
at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at com.network.GetJSONFomURL.getJSONSrtringFromUrl(GetJSONFomURL.java:53)
at com.network.WebServices.uploadImageUsingMultiPart(WebServices.java:73)
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:127)
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:252)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
at java.lang.Thread.run(Thread.java:1020)

【问题讨论】:

  • 您是否设置了允许外部存储写入/读取的权限? “java.io.FileNotFoundException: /content:/media/external/images/media/526 (No such file or directory)”你看不懂
  • @matheszabi 我在清单中添加了这一行 。够了吗?
  • 也许这会对你有所帮助:google.com/…

标签: android web-services path image-uploading filenotfoundexception


【解决方案1】:

只是一个更新,因为 managedQuery 已被弃用。

private String getPath(Uri uri) {
    String[]  data = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(context, uri, data, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

【讨论】:

    【解决方案2】:

    调用此方法,将 selectedUri 传递给它,作为回报,您将获得所需的路径

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    

    【讨论】:

    • 哇。这节省了我的时间。谢谢。无法判断 uri 是错误的。
    • 我得到一个异常:storage/emulated/0/Pictures/PicCollage/Photo 2013-12-13 14_33_55.jpg:打开失败:EACCES(权限被拒绝)
    • @IgorGanapolsky 您是否在清单中请求了android.permission.WRITE_EXTERNAL_STORAGE?如果您在 API 级别 23 及以上,您还需要实现Run Time Permissions
    【解决方案3】:

    那是因为content:/media/external/images/media/526 不是文件。它是媒体提供者的 URI 地址。如果您想要该文件,请检查这个 SO 问题:

    Get filename and path from URI from mediastore

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2016-09-20
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多