片段视图更改和齐射响应

时间:2017-08-28 04:51:33

标签: android android-fragments android-volley

我有一个片段,可以调用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)

1 个答案:

答案 0 :(得分:0)

根据堆栈跟踪,它表示您的Fragment不可见,并且仍在接收回调。

在接收进度回调时,您可以检查ProgressBar是否为空,然后只更新ProgressBar 删除回调并取消{{1}时的任务从Fragment删除;在Activity方法中。如果且仅当您的任务是onDestroyView()特定的。

否则,您可以转到Fragment并下载将在后台运行的数据,直到您的操作完成。

由于