【发布时间】:2017-08-28 04:51:33
【问题描述】:
我有一个调用 http volley 请求并更新进度条的片段。
进度条会根据要调用的剩余请求进行更新。
某些情况,如用户在片段上按下后退按钮,控件会引发空引用异常。我提到了生命周期并了解到至少必须进行检查以确保片段是否仍然存在/可见。
只是想确保在每次调用控件之前检查 this.isVisible 是否足够在凌空响应中,或者是否有任何其他好的通用解决方案实现这个?
堆栈跟踪如下:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setProgress(int)' on a null object reference
at grosspad.pmsquaresoft.com.expensemanager.fragments.sync.SyncProgressFragment.onMyGroupUsersDownloadComplete(SyncProgressFragment.java:245)
at grosspad.pmsquaresoft.com.expensemanager.serverapi.GrossPadApiProxy$43.onResponse(GrossPadApiProxy.java:706)
at grosspad.pmsquaresoft.com.expensemanager.serverapi.GrossPadApiProxy$43.onResponse(GrossPadApiProxy.java:701)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:742)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:5527)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
【问题讨论】:
-
请发布堆栈跟踪
-
@mzeus.bolt,完成。谢谢
-
我认为检查生命周期阶段没有意义。你为什么不检查一下 if(progressBar != null){progressBar.setProgress(progress);}
-
@piotrpo,检查 null 就像在发生某些事情后进行修补。所以我更喜欢取消 onDestroyView 中的回调。你觉得有道理吗?
-
ok - 销毁视图为时已晚 - 注册/注销与 UI 交互的回调的常见位置是 onResume() / onPause() 方法
标签: android android-fragments android-volley