nohana / Laevatein

Photo image selection activity set library. Currently under development.
247 stars 45 forks source link

Wrap openInputStream for cause NPE at Kyocera devices #64

Closed ghost closed 6 years ago

ghost commented 6 years ago

Overview

hiroyuki-seto commented 6 years ago

↑だけお願いしますー

hiroyuki-seto commented 6 years ago

This is stack trace of the crash. This exception happens 100% on Kyocera device. I think this crash is the cause of kyocera's bad inplementation.

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
       at android.os.Parcel.readException(Parcel.java:1552)
       at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
       at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:148)
       at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:691)
       at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1158)
       at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:994)
       at android.content.ContentResolver.openInputStream(ContentResolver.java:719)
       at com.laevatein.internal.utils.PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88)
       at com.laevatein.internal.utils.PhotoMetadataUtils.getBitmapSize(PhotoMetadataUtils.java:63)
       at com.laevatein.internal.ui.PreviewFragment.onActivityCreated(PreviewFragment.java:52)
       at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2201)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1326)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
       at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
       at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984)
       at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)
       at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
       at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:668)
       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:630)
       at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:622)
       at com.laevatein.ui.ImagePreviewActivity.onLoad(ImagePreviewActivity.java:143)
       at com.laevatein.internal.model.AlbumPhotoCollection.onLoadFinished(AlbumPhotoCollection.java:73)
       at com.laevatein.internal.model.AlbumPhotoCollection.onLoadFinished(AlbumPhotoCollection.java:39)
       at android.support.v4.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:476)
       at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:444)
       at android.support.v4.content.Loader.deliverResult(Loader.java:126)
       at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:105)
       at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:37)
       at android.support.v4.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:255)
       at android.support.v4.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:80)
       at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:485)
       at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:502)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5305)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:737)
KeithYokoma commented 6 years ago

Got it. Then my opinion is like this:

  1. Create a wrapper or utility class of ContentResolver to minimize the scope of NullPointerException handler.
  2. In the wrapper or the utility, return null if it catches NullPointerException.
KeithYokoma commented 6 years ago

LGTM

:+1:

ghost commented 6 years ago

Yui is so cute. original