【问题标题】:How to set different request codes in onActivityResult?如何在 onActivityResult 中设置不同的请求码?
【发布时间】:2016-11-05 10:14:49
【问题描述】:

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

java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/272 flg=0x1 } } 到活动 {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();
        }
    }

}

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 2020-09-11
      • 2021-06-27
      • 1970-01-01
      • 2020-09-15
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多