gpt4 book ai didi

java - Volley deliverResponse 未被调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:22 25 4
gpt4 key购买 nike

我正在使用 Volley,我看到了 parseNetworkResponse被调用,一切正常。解析很好,我可以在日志中看到而且我不返回 null。但出于某种原因,没有调用 deliverResponse?怎么可能会发生这种情况,或者我该如何调试它?

即使这样:

@Override
protected Response<Object> parseNetworkResponse(NetworkResponse response) {
Log.i(“TEST”, "Returning nothing from dummy parseNetworkResponse....");
Response<Object> jsonResponse = Response.success(new Object(), HttpHeaderParser.parseCacheHeaders(response));
Log.i("TEST", "Returning nothing....");
return jsonResponse;
}

尽管我可以在 LOGCAT 中看到日志,但最终并没有调用 deliverResponse

更新:
我通过调试器并最终进入 NetworkDispatcher 中的代码(在网络解析完成和响应后)请求.markDelivered();mDelivery.postResponse(请求,响应);然后执行ExecutorDelivery.postResponse中的代码:

mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable));

这最终会调用 mRequest.deliverResponse(mResponse.result);但是当我在 ResponseDeliveryRunnable.run 中添加断点时,代码不会中断,因此我假设调用 deliverResponse 的可运行对象没有运行。
知道为什么会发生这种情况吗?

最佳答案

检查您的 volley 日志以获取线索,如上述一些回答者所提到的。我使用别名来过滤 volley 日志,如下所示:

alias vlog='adb shell setprop log.tag.Volley VERBOSE && adb logcat -Cv 线程时间 | grep -Ii '\''volley'\'''

当我遇到这个问题时,我注意到有问题的特定请求会在日志中显示以下内容:

04-02 17:22:41.309 21639 21639 D Volley  : [1] MarkerLog.finish: (+0   ) [ 1] add-to-queue
04-02 17:22:41.309 21639 21639 D Volley : [1] MarkerLog.finish: (+10 ) [233] cache-queue-take
04-02 17:22:41.310 21639 21639 D Volley : [1] MarkerLog.finish: (+0 ) [233] cache-miss
04-02 17:22:41.313 21639 21639 D Volley : [1] MarkerLog.finish: (+1 ) [234] network-queue-take
04-02 17:22:41.314 21639 21639 D Volley : [1] MarkerLog.finish: (+227 ) [234] network-http-complete
04-02 17:22:41.314 21639 21639 D Volley : [1] MarkerLog.finish: (+3 ) [234] network-parse-complete
04-02 17:22:41.315 21639 21639 D Volley : [1] MarkerLog.finish: (+0 ) [234] post-response
04-02 17:22:41.315 21639 21639 D Volley : [1] MarkerLog.finish: (+0 ) [ 1] canceled-at-delivery

向右滚动,您会注意到最后一行中的 [ 1] canceled-at-delivery。如果在交付时它注意到原始请求已通过 cancel() 取消,则由 Volley 打印。不幸的是,我有一个代码路径将此作为“清理操作”过早地导致请求在交付之前被取消,导致 Volley 丢弃它。

来自 com.android.volley.ExecutorDelivery:93 :

    // If this request has canceled, finish it and don't deliver.
if (mRequest.isCanceled()) {
mRequest.finish("canceled-at-delivery");
return;
}

希望这对您有所帮助。

关于java - Volley deliverResponse 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com