Tôi đã cập nhật phiên bản hệ điều hành Android Nexus 5 lên 5.1.1 và cũng đã cập nhật ứng dụng Google Máy ảnh và Google Photos. Sau này, khi đã bao giờ tôi đã cố gắng để nắm bắt hình ảnh và Cắt nó, treo ứng dụng của tôi với các lỗi sau:Android: Sự cố sau khi Cắt hình ảnh khi cập nhật Hệ điều hành Phiên bản thành 5.1.1
FATAL EXCEPTION: main
Process: com.app.test, PID: 4857
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { typ=image/jpeg }} to activity {com.app.test/com.app.test.newActivity.activities.TestActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3574)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
at com.app.test.newActivity.activities.TestActivity.onActivityResult(TestActivity.java:127)
at android.app.Activity.dispatchActivityResult(Activity.java:6192)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Trước đây người ta làm việc tốt. Mã Tôi đã sử dụng như sau:
Chụp ảnh mã:
try {
Intent imageCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (imageCapture.resolveActivity(getContext().getPackageManager()) != null) {
imageCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.image_path)));
startActivityForResult(imageCapture, Constants.CAMERA_IMAGE_CAPTURE);
}
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getContext(), "device doesn't support capturing images!", Toast.LENGTH_SHORT).show();
}
ảnh Crop đang
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
if (requestCode == CAMERA_IAMGE_CROP) {
Bundle extras = intent.getExtras();//intent.getExtras() is always returns NULL here
Bitmap thePic = extras.getParcelable("data");
//setImageOnImageView(thePic);
} else if (requestCode == Constants.CAMERA_IMAGE_CAPTURE)) {
processCapturedImage();
}
}
}
private void processCapturedImage() {
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.image_path;
File file = new File(path);
if (file.exists()) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bm = BitmapFactory.decodeFile(path, options);
int rotate = AndroidUtils.getRotateValue(file.getAbsolutePath());
if (rotate != 0) {
Debug.print("Profile pic rotation value is not 0.");
/****** Image rotation ****/
Matrix matrix = new Matrix();
matrix.postRotate(rotate);
bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
}
picUri = getImageUri(getApplicationContext(), bm);
performCropAction();
} else {
Tools.showToast(EditProfileActivity.this, "Error occurred, please try again.");
}
} catch (Exception e) {
Debug.printException(e);
}
}
private void performCropAction() {
try {
Intent cropAction = new Intent("com.android.camera.action.CROP");
cropAction.setDataAndType(picUri, "image/*");
cropAction.putExtra("crop", "true");
cropAction.putExtra("aspectX", 1);
cropAction.putExtra("aspectY", 1);
cropAction.putExtra("outputX", AS.getInPixels(100));
cropAction.putExtra("outputY", AS.getInPixels(100));
cropAction.putExtra("return-data", true);
startActivityForResult(cropAction, CAMERA_IAMGE_CROP);
}
catch (ActivityNotFoundException anfe) {
Toast.makeText(this, "your device doesn't support the crop action!", Toast.LENGTH_SHORT).show();
}
}
Như bạn thấy, extras Bundle = ý định. getExtras(); intent.getExtras() ở đây luôn trả về NULL.
Bất kỳ trợ giúp nào thực sự được đánh giá cao! Cảm ơn.
Android không có 'CROP'' Intent'. Có rất nhiều [thư viện cắt ảnh] (http://android-arsenal.com/tag/45) có sẵn cho Android; xin vui lòng sử dụng một. – CommonsWare
nhưng cùng một mã hoạt động bên dưới 5.1.1. Trong 5.1.1 ứng dụng bị treo với ngoại lệ. {java.lang.RuntimeException: Không cung cấp kết quả ResultInfo {who = null, request = 1, result = 0, data = null} đến hoạt động {camera.test.demo/camera.test.demo.SimpleCameraGalleryDemo}: java.lang. NullPointerException: Cố gắng gọi phương thức ảo 'android.os.Bundle android.content.Intent.getExtras()' trên tham chiếu đối tượng null} – user1182217
"nhưng cùng một mã hoạt động bên dưới 5.1.1" - có vài nghìn mẫu thiết bị Android. Tôi cảm thấy rất tự tin rằng bạn đã không thử nghiệm trên tất cả chúng, hoặc thậm chí nhiều người trong số họ. Nhiều khả năng, bạn đã thử nghiệm trên chỉ một hoặc hai trong số họ. Các nhà phát triển cẩu thả cho rằng các hành động 'Intent' không chính thức, không được hỗ trợ và không chính thức sẽ được hỗ trợ trên tất cả các thiết bị. Các nhà phát triển tài năng sử dụng thư viện. – CommonsWare