java.lang.NullPointerException:尝试调用虚方法’java.lang.String android.net.Uri.getScheme()’

我正在尝试从图库和相机上传图像到服务器。当我选择图库中的图像上传到服务器其工作Perfactly.But当我选择相机捕获图像上传到服务器其崩溃并显示错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 

在OnActivityResult。

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); decodeFile(picturePath); new ImageUploadTask().execute(); }else { Toast.makeText(getApplicationContext(), "User Canceled", Toast.LENGTH_LONG).show(); } } 

我在onActivityResult的这一行得到了错误

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

按钮点击时用于打开相机的方法。

  loadimage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { AlertDialog.Builder builder = new AlertDialog.Builder(Add_Info.this); builder.setMessage("Select Image From") .setCancelable(true) .setPositiveButton("Camera", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CAMERA_REQUEST); mImageCaptureUri = Uri.fromFile(new File(Environment .getExternalStorageDirectory(), "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); } }) .setNegativeButton("Gallery", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent i = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_LOAD_IMAGE); } }); AlertDialog alert = builder.create(); alert.show(); } }); 

帮我解决这个问题。我不知道如果我使用之后已经在我以前的PROJECT中如何得到这个错误。

提前致谢

我在使用Camera api和onActivityResult的Intent时遇到了同样的问题,最后我发现它取决于你的android设备版本,在Android M(Marshmallow – 6.0-6.0.1)中onActivityResult意图如下:

 requestCode : 230 resultCode : -1 intent :Intent{dat=file:///storage/emulated/0/Pictures/Rahnama/IMG_20160508_121332_1519065 564.jpg typ=image/jpeg } RESULT_OK : -1 

对于低于Marshmallow的Android版本:

 requestCode : 230 resultCode : -1 intent : Intent { dat=content://media/external/images/media/309 (has extras) } RESULT_OK : -1 

我认为你必须检查Android版本onActivityResult和Android版本Marshmallow从Uri和Intent中的路径获取直接文件:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M){ final Uri data = intent.getData(); final File file = new File(data.getPath()); // now you can upload your image file }else{ // in android version lower than M your method must work } 

我希望它对你有用。

我遇到这个问题,经过多次测试后,我发现它因为我设置了名为“android:windowIsTranslucent = true”的属性,如果我从样式中删除这个属性,它总是有效。希望对你有所帮助。

 if (null != account.getPhotoUrl()) { // Write code here }