crazycodeboy / TakePhoto

一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库
http://www.devio.org/tags/#TakePhoto
Apache License 2.0
7.25k stars 1.51k forks source link

安卓7.0以上 java.lang.reflect.UndeclaredThrowableException的解决 #545

Open taiji1 opened 4 years ago

taiji1 commented 4 years ago

java.lang.reflect.UndeclaredThrowableException at android.app.ActivityThread.deliverResults(ActivityThread.java:4605) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1997) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7047) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) Caused by: java.lang.reflect.UndeclaredThrowableException at $Proxy5.onActivityResult($Proxy5.java) at android.app.Activity.dispatchActivityResult(Activity.java:7583) at android.app.ActivityThread.deliverResults(ActivityThread.java:4598) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Method.java) at com.jph.takephoto.permission.TakePhotoInvocationHandler.invoke(TakePhotoInvocationHandler.java:39) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) ... 16 more Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getName()' on a null object reference at com.jph.takephoto.uitl.TImageFiles.getMimeType(TImageFiles.java:133) at com.jph.takephoto.app.TakePhotoImpl.onCrop(TakePhotoImpl.java:275) at com.jph.takephoto.app.TakePhotoImpl.onActivityResult(TakePhotoImpl.java:153) ... 19 more java.lang.reflect.UndeclaredThrowableException at $Proxy5.onActivityResult($Proxy5.java) at android.app.Activity.dispatchActivityResult(Activity.java:7583) at android.app.ActivityThread.deliverResults(ActivityThread.java:4598) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1997) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7047) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Method.java) at com.jph.takephoto.permission.TakePhotoInvocationHandler.invoke(TakePhotoInvocationHandler.java:39) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) ... 16 more Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getName()' on a null object reference at com.jph.takephoto.uitl.TImageFiles.getMimeType(TImageFiles.java:133) at com.jph.takephoto.app.TakePhotoImpl.onCrop(TakePhotoImpl.java:275) at com.jph.takephoto.app.TakePhotoImpl.onActivityResult(TakePhotoImpl.java:153) ... 19 more java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Method.java) at com.jph.takephoto.permission.TakePhotoInvocationHandler.invoke(TakePhotoInvocationHandler.java:39) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy5.onActivityResult($Proxy5.java) at android.app.Activity.dispatchActivityResult(Activity.java:7583) at android.app.ActivityThread.deliverResults(ActivityThread.java:4598) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1997) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7047) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getName()' on a null object reference at com.jph.takephoto.uitl.TImageFiles.getMimeType(TImageFiles.java:133) at com.jph.takephoto.app.TakePhotoImpl.onCrop(TakePhotoImpl.java:275) at com.jph.takephoto.app.TakePhotoImpl.onActivityResult(TakePhotoImpl.java:153) ... 19 more java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getName()' on a null object reference at com.jph.takephoto.uitl.TImageFiles.getMimeType(TImageFiles.java:133) at com.jph.takephoto.app.TakePhotoImpl.onCrop(TakePhotoImpl.java:275) at com.jph.takephoto.app.TakePhotoImpl.onActivityResult(TakePhotoImpl.java:153) at java.lang.reflect.Method.invoke(Method.java) at com.jph.takephoto.permission.TakePhotoInvocationHandler.invoke(TakePhotoInvocationHandler.java:39) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy5.onActivityResult($Proxy5.java) at android.app.Activity.dispatchActivityResult(Activity.java:7583) at android.app.ActivityThread.deliverResults(ActivityThread.java:4598) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1997) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7047) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)

taiji1 commented 4 years ago

log 如上 ,解决此问题需要

将自定义TakePhotoActivity中 takePhoto.onPickFromDocumentsWithCrop(imageUri, getCropOptions()); 替换成takePhoto.onPickFromGalleryWithCrop(imageUri, getCropOptions());

taiji1 commented 4 years ago

单纯的修改provide 是解决不了问题的 真正造成crash的问题是 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getName()' on a null object reference at com.jph.takephoto.uitl.TImageFiles.getMimeType(TImageFiles.java:133) at com.jph.takephoto.app.TakePhotoImpl.onCrop(TakePhotoImpl.java:275) at com.jph.takephoto.app.TakePhotoImpl.onActivityResult(TakePhotoImpl.java:153)