小鴨有來電時撞到pat咁既野,之前未遇過之後又reproduce唔到,最近又無改過相關既Code –
java.lang.NullPointerException: Attempt to invoke virtual method 'com.headuck.headuckblocker.dblistview.DbRecord$DbRecordView com.headuck.headuckblocker.dblistview.DbListFragmentBase$ListRecyclerAdapter.swapData(com.headuck.headuckblocker.dblistview.DbRecord$DbRecordView)' on a null object reference at com.headuck.headuckblocker.dblistview.DbListFragmentBase.onLoadFinished(DbListFragmentBase.java:75) at com.headuck.headuckblocker.dblistview.DbListFragmentBase.onLoadFinished(DbListFragmentBase.java:27) 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 com.headuck.headuckblocker.dblistview.JunkDbLoader.onComplete(JunkDbLoader.java:182) at com.headuck.headuckblocker.dblistview.JunkDbLoader$ForceLoadHandler.onComplete(JunkDbLoader.java:204) at com.headuck.headuckblocker.dblistview.DbRecord$RecordQueryThread$1.run(DbRecord.java:342) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5534) 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:955) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)
意思係Loader load完野call back時,Fragment的Listview未initialize,但係個Loader明明係遲過Fragment的Listview initialize的…
Trace一輪自己同suport library既source,仲計係因為在Fragment中用了唔知邊度抄返來的getActivity().getSupportLoaderManager()而唔係Fragment本身的getLoaderManager()去攞個LoaderManager,雖然兩者都係回覆同一個Loader Manager instance但係後者才會令Fragment在回收時處理個Loader。因此用了前者後,Fragment被回收時個Loader唔會被stop,而咁啱呢次Loader又做緊野…
API文件無特別提及呢點,因此之後去左StackOverflow寫低呢段野警世。(個accepted answer 自已list左段code已證明兩者不同,但又答話 I’m pretty sure there is no difference whatshoever between the two,真係…)