1、Fragment中调用getActivity为null的问题
Fragment中调用getActivity为null的问题,没有销毁Activity,一直在前台
我还是想不明白这个为啥为null
Activity肯定是没有销毁的 就是 ViewPager+Adapter


发现 lazyLoad() 加载的时机比onAttach()还早
-
Fragment 的生命周期 简直颠覆了我的看法 但是不是这个问题导致到
image.png
打个日志


得出的结果就是在某一次的时候肯定会进来,是谁引起的


点击上面切换Tab 去加载fragment的时候引起的
Fragment中调用getActivity为null的问题,完美解决
2、data class 中的某些元素始终为固定值,但是我需要手动添加一些特殊的Item
- 出现的问题的,一个Adapter +RecyclerView实现不同的Item的效果,从后台获取了数据,我们还要本地去加工数据,记住变量可千万不能写private 修饰,这样是改不动的,去掉private 完美解决

- 理解的就是私有变量你改不动,但是kotlin给data class 定义数据的时候,可以标明,这就是矛盾
3、在fragment+ViewPager的使用过程中,最好不要在init方法中去mPresenter.attachView(this)
,当然在Activity中这样去使用是没有问题的

-
导致的原因 BasePresenter 会去检查是否绑定了View
image.png
-
如果没有绑定就会为抛出异常,强制让我们去检查代码的正确性
image.png
-
在我的网络加载框架的过程中,会有一个解绑的动作
image.png
image.png
-
我们知道init 是class在初始化 执行的 ,而在fragment+ViewPager 使用过程中,就会把相隔的那个Fragment销毁了,所以就会导致 mvpView=null 但是呢?切换过去的时候不会重新
init
,所以需要重新的mPresenter.attachView(this)

- 完美解决
4、mvpView
肯定不为null,为什么还是抛出06-18 16:41:43.890 8931-8931/? E/BasePresenter: kotlin.KotlinNullPointerException
- 如下面所示的问题结果
06-18 16:41:43.890 8931-8931/? E/BasePresenter: kotlin.KotlinNullPointerException
at com.xfxb.paperless.mvp.presenter.MainPresenter$updateProduceVoiceRemind$disposable$1.accept(MainPresenter.kt:34)
at com.xfxb.paperless.mvp.presenter.MainPresenter$updateProduceVoiceRemind$disposable$1.accept(MainPresenter.kt:26)
at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:119)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:736)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
at dalvik.system.NativeStart.main(Native Method)

- 其实就是这一行
mvpView?.updateProduceVoiceRemindSuccess(it.data!!)
image.png
- 导致的原因是 data是null的不能够直接加上非null判断号,去掉
it.data!!
变更为it.data
image.png

5、data Class 和java Bean互用的问题

06-19 17:56:16.390 29637-29637/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xfxb.paperless.prd.debug, PID: 29637
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter chocoBoard
at com.xfxb.paperless.mvp.model.bean.SkuPackDetailInfo.<init>(PackagerOrderDetailResponseBean.kt)
at com.xfxb.paperless.weight.TipDialog$3.onClick(TipDialog.java:178)
at android.view.View.performClick(View.java:4453)
at android.view.View$PerformClick.run(View.java:18514)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:736)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
at dalvik.system.NativeStart.main(Native Method)

-
把
image.png
-
改为
image.png
-
完美解决问题
6、如果对kotlin 一个null的对象进行强转的话,后续代码不会执行
val orderId= MemoryCache.getInstance().get(MemoryCache.SELECTED_ORDER_ID) as String
-
如果
MemoryCache.getInstance().get(MemoryCache.SELECTED_ORDER_ID)
取出来是null,就不会执行后面的代码了,而且还不输出什么日志 -
这其实也是Kotlin和Java之间互用的问题,Java对Null不太敏感
网友评论