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

时间:2016-07-03 16:17:15

标签: 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} } to 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();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

试试这个

  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" />