2016-07-03 31 views
0

我有一個應用程序,從畫廊或從相機中選擇一張圖片,並將其放在imageview上。問題是我無法爲同一個OnActivityResult設置兩個不同的請求代碼。 相機捕捉作品,但畫廊沒有。我得到這個:如何在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 at 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(); 
     } 
    } 

} 

回答

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" /> 
相關問題