我正在尝试从用户那里获取图片,然后将其发送到我们的服务器。我提供了两种选择:从图库中选择或使用手机中的默认相机拍摄新照片。
图库的东西工作正常,我可以得到他们选择的照片并毫无问题地发送它。但是在相机选项中,相机打开,拍照,将其保存在我指定的位置的 SD 卡上,没问题,但是当它返回我的应用程序时,我总是得到一个 NullPointerException 并且我的应用程序被强制关闭。这是我所做的:
private String tempFilePath = "";
...
public void addPhotoUsingCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempFilePath = getOutputMediaFilePath(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(tempFilePath)));
startActivityForResult(intent, CAMERA_ACTIVITY_CODE);
}
然后我使用以下方法拍摄照片:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
...
case CAMERA_ACTIVITY_CODE:
if (resultCode == Activity.RESULT_OK) {
picture = new File(tempFilePath);
}
break;
...
}
}
我也试过
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ImageView image = (ImageView) findViewById(R.id.photoTaken);
image.setImageBitmap(thumbnail);
在里面case CAMERA_ACTIVITY_CODE:
,但无论我尝试什么,我总是在这部分代码中得到一个 NullPointerException 。
有第 202 行对应case CAMERA_ACTIVITY_CODE:
部分的 logcat 信息。
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=101, result=-1, data=null} to activity {com.ollaa.android/com.ollaa.android.share.ShareFinalScreen}: java.lang.NullPointerException
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.NullPointerException
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): at com.ollaa.android.share.ShareFinalScreen.onActivityResult(ShareFinalScreen.java:202)
任何帮助是极大的赞赏。
注意:我已经在 AndroidManifest 中声明了与相机和 SD 卡相关的所有必要权限。
编辑:我意识到 tempFilePath 不会持续到相机活动返回到我的应用程序。我将 tempFilePath 的初始化放在我的onCreate
方法中,但是当我尝试从onActivityResult
. 我觉得我根本不懂Java,当我们在函数中更改类变量时,更改后的值应该在该类的所有函数中都是可见的,对吧??