[英]Activity becomes null on onActivityResult method
When user presses a button i launch camera, user captures image, and press ok, and app got crash on lollipop device.当用户按下按钮时,我启动相机,用户捕获图像,然后按确定,应用程序在棒棒糖设备上崩溃。
It works fine on other devices.它在其他设备上运行良好。
When i check, all variables and everything in activity becomes null when user comes back after capturing image.当我检查时,当用户在捕获图像后返回时,所有变量和活动中的所有内容都变为 null。 I don't know why 2 lollipop low end devices making all variables null.
我不知道为什么 2 个棒棒糖低端设备制造所有变量 null。
This is my code.这是我的代码。
public void launchCamera(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (getPermissions(Manifest.permission.CAMERA, CAMERA_PERMISSION_CODE)) {
openCamera();
}
}else{
openCamera();
}
}
public void openCamera(){
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
}
if (photoFile != null) {
String authorities = getApplicationContext().getPackageName() + ".fileprovider";
photoURI = FileProvider.getUriForFile(this,
authorities,
photoFile);
try{
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, 1);
}catch (Exception ex){
Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
Logcat日志猫
java.lang.RuntimeException: Unable to resume activity {com.app.myapp/com.app.myapp}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.app.myapp}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.app.myapp}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference
EDIT编辑
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
switch(requestCode) {
case CAMERA_RESULT:
if (responseCode == RESULT_OK) {
onProfilePicAddedFromCamera(photoURI, mCurrentPhotoPath);
}
break;
case GALLERY_RESULT:
if (responseCode == RESULT_OK) {
Uri selectedImage = intent.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage);
onProfilePicAddedFromGallery(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
mTwitterAuthClient.onActivityResult(requestCode, responseCode, intent);
callbackManager.onActivityResult(requestCode, responseCode, intent);
}
try to add this尝试添加这个
public void launchCamera(){
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.CAMERA)) {
//Show permission dialog
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.CAMERA}, code);
}
}
else
openCamera();
}
and in requestPermission Method并在 requestPermission 方法中
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
Log.e("", "Permission denied");
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.