3

在我的应用程序中,我有一个视频上传选项,允许用户上传视频。一切正常,除非用户尝试从外部存储中选择视频。该应用程序将崩溃并放弃NullPointerException。有人可以解释为什么吗?当用户从图库或手机存储中选择视频而不是外部存储时,该功能如何正常工作?这是我收到的错误消息

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { act=file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/VIDEO0010.mp4 dat=file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/VIDEO0010.mp4 }} to activity {com.myactivity.android/com.myactivity.android.Webviewer}: java.lang.NullPointerException

下面是我的代码

private VideoFileInfo getVideoInfo(Uri uri) {


        String[] projection = { MediaStore.Images.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.TITLE };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        cursor.moveToFirst(); //this is where the app crashed

        String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
        String fileName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
        int fileSize = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
        long duration = TimeUnit.MILLISECONDS.toSeconds(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)));

        System.out.println("path: " + filePath);
        System.out.println("name: " + fileName);
        System.out.println("size: " + fileSize);
        System.out.println("duration: " + duration);
        vfi.setPathNameSizeDuration(filePath, fileName, fileSize, duration);



    return vfi;
}
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

    switch (requestCode) {

    case FILECHOOSER_REQUESTCODE_VIDEO:     
        if (resultCode == Activity.RESULT_OK) {
            System.out.println("SELECT_AUDIO");
            Uri selectedVideoUri = intent.getData();
            selectedPath = getVideoInfo(selectedVideoUri).getPath();
            System.out.println("SELECT_AUDIO Path : " + selectedPath);
            //bm = BitmapFactory.decodeFile(selectedPath);
            blVideoDail = true;
        }
        break;
    }
}
private void createVideoIntent(){
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("video/*");

    Intent chooser = createVideoChooserIntent(createVideoFromCameraIntent());
    chooser.putExtra(Intent.EXTRA_INTENT, intent);
    startActivityForResult(chooser, FILECHOOSER_REQUESTCODE_VIDEO); 
}
private Intent createVideoChooserIntent(Intent... intents) {
    Intent chooser = new Intent(Intent.ACTION_CHOOSER);
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);
    chooser.putExtra(Intent.EXTRA_TITLE, "Please Choose Your Video");
    return chooser;
}
private Intent createVideoFromCameraIntent() {  
    return new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
}

有人可以帮忙吗?谢谢

应用程序在点击时崩溃cursor.moveToFirst();

FATAL EXCEPTION: main
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { act=file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/VIDEO0010.mp4 dat=file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/VIDEO0010.mp4 }} to activity {com. myactivity .android/com.myactivity.android.Webviewer}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3387)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3437)
at android.app.ActivityThread.access$1100(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1291)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:4945)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.myactivity.android.Webviewer.getVideoInfo(Webviewer.java:455)
at com.myactivity.android.Webviewer.onActivityResult(Webviewer.java:500)
at android.app.Activity.dispatchActivityResult(Activity.java:4740)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3383)
... 11 more
4

1 回答 1

-1

公共无效选择文件(){意图意图=新意图();intent.setType("video/*"); 意图.setAction(意图.ACTION_GET_CONTENT);startActivityForResult(Intent.createChooser(intent, "选择一个视频"), SELECT_VIDEO);

}

使用以下代码从手机/卡中选择视频

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == SELECT_VIDEO)
                onSelectFromGalleryResult(data);
            /*
             * else if (requestCode == REQUEST_CAMERA)
             * onCaptureImageResult(data);
             */}
    }
}

@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
    Uri selectedImageUri = data.getData();
    String[] projection = { MediaColumns.DATA };
    Cursor cursor = managedQuery(selectedImageUri, projection, null, null,
            null);
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
    cursor.moveToFirst();

    String selectedImagePath = cursor.getString(column_index);

    File fileUpload = new File(selectedImagePath);
    // selected_image_file.add(fileUpload);
    // new UploadAdvertisement().execute();

    Bitmap bm;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(selectedImagePath, options);
    final int REQUIRED_SIZE = 200;
    int scale = 1;
    while (options.outWidth / scale / 2 >= REQUIRED_SIZE
            && options.outHeight / scale / 2 >= REQUIRED_SIZE)
        scale *= 2;
    options.inSampleSize = scale;
    options.inJustDecodeBounds = false;
    bm = BitmapFactory.decodeFile(selectedImagePath, options);
    ImageView image = new ImageView(getApplicationContext());
    // image.setId(adverticse_image_start_id);
    int width = (int) (getResources().getDimension(R.dimen.dim_100) / getResources()
            .getDisplayMetrics().density);
    int left_margin = (int) (getResources().getDimension(R.dimen.dim_15) / getResources()
            .getDisplayMetrics().density);
    LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(width,
            LayoutParams.MATCH_PARENT);
    param.setMargins(left_margin, 0, 0, 0);

    image.setLayoutParams(param);
    image.setImageBitmap(bm);
    System.out.println("selected video path >>>>" + selectedImagePath);
    if (selectedImagePath != null) {
        new UploadFileToserver().execute();
    }
}

上面的代码将为您提供所选项目的文件名

于 2015-06-17T05:45:58.457 回答