java - 如何在onActivityResult中设置不同的请求码?

标签 java android android-studio

我有一个应用程序,可以从图库或相机中选择图片并将其放在 ImageView 上。问题是我无法为同一个 OnActivityResult 设置两个不同的请求代码。 相机捕捉有效,但画廊无效。我明白了:

java.lang.RuntimeException:将结果 ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/272 flg=0x1 }} 传递到 Activity {com.parse.starter/com.parse.starter.reportar} 失败:java.lang.NullPointerException:uriString 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3649)

有人可以帮我吗?这是我的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //Image from gallery...

    if(requestCode == 1 && resultCode == RESULT_OK && data !=null){

        Uri selectedImage = data.getData();

        try {
            //converts data into bitmap
            Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
            //sets image on imageview
            ImageView imageView = (ImageView) findViewById(R.id.imageView);
            imageView.setImageBitmap(bitmapImage);
        } catch (IOException e){
            e.printStackTrace();
            Toast.makeText(getApplication().getBaseContext(),"Error", Toast.LENGTH_LONG).show();
        }

    }

//Image from camera

     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        try {
            mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
            ImageView imageView = (ImageView) findViewById(R.id.imageView);
            imageView.setImageBitmap(mImageBitmap);
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(getApplication().getBaseContext(),"Error", Toast.LENGTH_LONG).show();
        }
    }

}

最佳答案

试试这个

  private int LOAD_IMAGE_RESULTS=1;

OnChoose代码

        chooseimage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {



            if (Build.VERSION.SDK_INT >= 23){

                boolean result= Utility.checkPermission(getActivity());

                if(result) {
                    galleryIntent();
                }

            }

            else {
                Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                // Start new activity with the LOAD_IMAGE_RESULTS to handle back the results when image is picked from the Image Gallery.
                startActivityForResult(i,LOAD_IMAGE_RESULTS); //LOAD_IMAGE_RESULTS
            }




        }
    });
<小时/>

还添加了用于权限和设置图像的代码

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (Build.VERSION.SDK_INT >= 23) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == LOAD_IMAGE_RESULTS) {
                onSelectFromGalleryResult(data);

            }
        }
    }
    else {



                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && isMediaDocument(data.getData())) {

                    Bitmap bitmap = null;
                    Uri selectedImage = data.getData();
                    String wholeID = DocumentsContract.getDocumentId(selectedImage);

                    // Split at colon, use second item in the array
                    String id = wholeID.split(":")[1];

                    String[] column = {MediaStore.Images.Media.DATA};

                    // where id is equal to
                    String sel = MediaStore.Images.Media._ID + "=?";

                    Cursor cursor = getActivity().getContentResolver().
                            query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                    column, sel, new String[]{id}, null);

                    String filePath = "";

                    int columnIndex = cursor.getColumnIndex(column[0]);

                    if (cursor.moveToFirst()) {
                        //filePath = cursor.getString(columnIndex);
                        mPath = cursor.getString(columnIndex);
                    }


                    cursor.close();

                }
                else {
                    if (requestCode == LOAD_IMAGE_RESULTS && resultCode == getActivity().RESULT_OK && data != null) {
                        // Let's read picked image data - its URI
                        Uri pickedImage = data.getData();
                        // Let's read picked image path using content resolver
                        String[] filePath = {MediaStore.Images.Media.DATA};
                        Cursor cursor = getActivity().getContentResolver().query(pickedImage, filePath, null, null, null);
                        cursor.moveToFirst();
                        mPath = cursor.getString(cursor.getColumnIndex(filePath[0]));
                        //edAttach.setText(mPath.toString()); path set anywhere
                        cursor.close();
                    }

                }
    }
}




private void onSelectFromGalleryResult(Intent data) {

    Bitmap bm=null;
    if (data != null) {
        try {
            bm = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData());
        } catch (IOException e) {
            e.printStackTrace();
        }
ivprofile.setImageBitmap(bm);
    }



    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && isMediaDocument(data.getData())) {
        Uri selectedImage = data.getData();
        String wholeID = DocumentsContract.getDocumentId(selectedImage);

        // Split at colon, use second item in the array
        String id = wholeID.split(":")[1];

        String[] column = {MediaStore.Images.Media.DATA};

        // where id is equal to
        String sel = MediaStore.Images.Media._ID + "=?";

        Cursor cursor = getActivity().getContentResolver().
                query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        column, sel, new String[]{id}, null);

        String filePath = "";

        int columnIndex = cursor.getColumnIndex(column[0]);

        if (cursor.moveToFirst()) {
            //filePath = cursor.getString(columnIndex);
            mPath = cursor.getString(columnIndex);
            //edAttach.setText(mPath); path set anywhere


        }
        cursor.close();
    }
    else {
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};

        Cursor cursor = getActivity().getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        mPath = cursor.getString(columnIndex).toString();
        System.out.println("picturePath" + mPath);
        if (!mPath.equalsIgnoreCase(null)) {
            edAttach.setText(mPath);
        }
        cursor.close();
    }

}

public boolean hasPermissionInManifest(Context context, String permissionName) {
    final String packageName = context.getPackageName();
    try {
        final PackageInfo packageInfo = context.getPackageManager()
                .getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
        final String[] declaredPermisisons = packageInfo.requestedPermissions;
        if (declaredPermisisons != null && declaredPermisisons.length > 0) {
            for (String p : declaredPermisisons) {
                if (p.equals(permissionName)) {
                    return true;
                }
            }
        }
    } catch (PackageManager.NameNotFoundException e) {

    }
    return false;
}


 public static boolean isMediaDocument(Uri uri)
{
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}

private void galleryIntent()
{
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);//
    startActivityForResult(Intent.createChooser(intent, "Select File"),LOAD_IMAGE_RESULTS);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                galleryIntent();

            } else {
                //code for deny
            }
            break;
    }
}

或者 mainfiest.xml 中的权限

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

关于java - 如何在onActivityResult中设置不同的请求码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38171859/

相关文章:

java - 在 JTable 中,编辑单元格唯一的 JComboBox 时更新显示的项目

java - Java 中的日期不正确

java - 根据屏幕尺寸缩放 ImageButton

AndroidStudio 4.1 稳定版。调试器的问题

android - 文件资源检查为红色,尽管 R 有效

java - 任务 ':transformClassesWithJarMergingForDebug'的Android项目错误执行失败

java - 如何设置Jframe为5秒

java - K&R 配置文件未包含在 Eclipse 上的内置配置文件中

android - 接听电话

android - 需要首先通过缓冲而不下载完整视频来在 videoview 中播放视频。有这方面的图书馆吗?