java - libcore.io.ErrnoException : open failed: ENOENT (No such file or directory)

标签 java android

我想从图库中选择一个视频文件(我的代码的第一部分)并使用 Retrofit 将其上传到服务器 - 请忽略这个问题。因此,我想将文件从第一部分传递到第二部分,但它给了我标题中提到的错误。

MainActivity:

public class MainActivity extends Activity 
{
    private static int RESULT_LOAD_VIDEO = 1;
    String decodableString;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button btn_load = (Button) findViewById(R.id.buttonLoadVideo);
        btn_load.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
               loadVideoFromGallery(btn_load);
            }
        });
    }
    /*
     * PICK THE VIDEO AND EXTRACT ITS ADDRESS
     */
    public void loadVideoFromGallery(View view) 
    {
        Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(galleryIntent, RESULT_LOAD_VIDEO);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        super.onActivityResult(requestCode, resultCode, data);
        try {
            // When a video is picked
            if (requestCode == RESULT_LOAD_VIDEO && resultCode == RESULT_OK
                    && null != data) 
            {
                // Get the video from data
                Uri selectedVideo = data.getData();
                String[] filePathColumn = { MediaStore.Video.Media.DATA };
                Cursor cursor = getContentResolver().query(selectedVideo,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                decodableString = cursor.getString(columnIndex);
                Log.i("mok","ds: " + decodableString);//ds: /storage/extSdCard/DCIM/Camera/20151112_142950.mp4
                Log.i("mok","svp: " + selectedVideo.getPath());//svp: /external/video/media/253
                Log.i("mok","fpc0: " + filePathColumn[0]);//fpc0: _data
                cursor.close();
                File file = new File(selectedVideo.getPath());
                upload(file);
            } else 
            {
                Toast.makeText(this, "You haven't picked any video",
                        Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) 
        {
            e.printStackTrace();
            Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                        .show();
            }
        }

    /*
     * UPLOAD THE SELECTED VIDEO TO THE SRVER
     */

    public void upload(File file)
    {
        final String BASE_URL = "http://192.168.1.7/";
        Retrofit retrofit = new Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

        UploadApiService service = retrofit.create(UploadApiService.class);
        MediaType MEDIA_TYPE = MediaType.parse("video/mp4");
        RequestBody requestBody = RequestBody.create(MEDIA_TYPE, file);
        Call<ResponseBody> call = service.uploadVideo("desc", requestBody);
        call.enqueue(new Callback<ResponseBody>(){
            @Override
            public void onResponse(Response<ResponseBody> response, Retrofit retrofit) 
            {
                // TODO Auto-generated method stub
                if (response.isSuccess())
                {
                    Log.i("mok","S");
                    ResponseBody rb = response.body();
                }
                else
                {
                    Log.i("mok","F");
                    com.squareup.okhttp.ResponseBody rb = response.errorBody();
                }
            }
            @Override
            public void onFailure(Throwable t) 
            {
                t.printStackTrace();
                Log.i("mok",t.getCause()+"");
                Log.i("mok","T");
                finish();
            }
        });
    }
}

最佳答案

只是我必须使用File file = new File(decodableString)。错误消失了(问题得到了解答),所以我发布了这个答案,但是上传文件的解决方案无法正常工作(这是另一个问题)。

关于java - libcore.io.ErrnoException : open failed: ENOENT (No such file or directory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33717443/

相关文章:

Android 直播视频流问题

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure Software caused connection abort: recv failed

Java 服务包装器 : socket not open, 因此数据包未发送 SERVICE_CONTROL_CODE : 4

java - StringBuilder.append() 是否应该始终优先于串联?

java - Spring Annotation Configs - 基于 YAML 配置动态创建类

android - PNG Logo 在 Android 5 (api v22) 的启动画面中显示两次并变形

java - 如何从时区获取时区 ID

java - 放置我自己的 Java 代码(不是服务、 Activity 、 fragment 等)的正确位置在哪里?

java - 不推荐使用 Activity 类型的方法 managedQuery(Uri, String[], String, String[], String)

android - ImageView.Visible 和 ImageView.Gone 不工作 android