我有一个片段,可以调用http volley请求并更新进度条。
进度条会根据要调用的其余请求进行更新。
某些实例,例如用户按下片段上的后退按钮,控件会引发 null引用异常。我提到了生命周期,并得出一个理解,即至少必须进行检查以确保碎片是否仍然存活/可见。
只是想确保在每次调用排球响应中的控件之前检查 this.isVisible 是否足够,或者是否还有其他任何良好的通用解决方案实现这个目标?
Stacktrace如下:
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)
答案 0 :(得分:0)
根据堆栈跟踪,它表示您的Fragment不可见,并且仍在接收回调。
在接收进度回调时,您可以检查ProgressBar
是否为空,然后只更新ProgressBar
或删除回调并取消{{1}时的任务从Fragment
删除;在Activity
方法中。如果且仅当您的任务是onDestroyView()
特定的。
否则,您可以转到Fragment
并下载将在后台运行的数据,直到您的操作完成。
由于