在我的一个应用程序中,我使用谷歌提供的凌空截击向服务器发送请求。
问题:onErrorResponse(凌空错误)上的超时和错误对象为空
到目前为止,我已经尝试了:
1) 首先,我得到了空错误对象,因此使用以下代码解决了它:
@Override
protected void deliverResponse(String response) {
super.deliverResponse(response);
}
@Override
public void deliverError(VolleyError error) {
super.deliverError(error);
DebugLog.e("deliverResponse", "getNetworkTimeMs : " + error.getNetworkTimeMs());
}
到目前为止,当我得到错误对象null
时,会发生超时
。
2)现在应用程序适用于Android
和iOS
和web
,但超时
仅适用于Android
。
请求的凌空日志:
BasicNetwork.logSlowRequests: HTTP response for request
编辑注释:
>
服务器端开发的Web服务对于所有三个实例(Android、Web和iOS)都是相同的。
超时
当太多用户向服务器发出请求时发生。
虽然凌空抽射有时会在30秒内超时,但我已经将时间设定为2分钟。
我有很多答案改变服务器,但因为这是不可能的,所以任何其他解决方案请。
我还想补充一点,如果我能得到更多关于凌空抽射何时可能超时的信息?
我经历过的参考资料:
优化截击
http客户端-经常-超时-使用-无线网络-正在-罚款-与-3 g
android上的long\u xmlhttprequest\u ajax\u requests\u timeout\u
编辑:
我还设置了如下重试策略:
request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48,
0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
而且我也不想重试如果连接超时。
如何进行有效的服务调用,以解决超时问题。
任何帮助都将受到感谢。
谢谢
public class JGet extends Request {
private final Response.Listener listener;
public JGet(final String url, List params,
Response.Listener responseListener) {
super(Request.Method.GET, NetUtils.getUrlWithParams(url, params), new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
NetUtils.dealVolleyError(volleyError, url);
}
});
this.listener = responseListener;
this.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 1.0f));
LogUtils.e("request-start--->");
LogUtils.e(url);
LogUtils.e(params);
LogUtils.e("request-start--->");
}
}
设置超时时间。
您好,您可以参考以下内容:
基本网络内部。java,您会发现一些信息,例如:
...
private static int SLOW_REQUEST_THRESHOLD_MS = 3000;
...
/**
* Logs requests that took over SLOW_REQUEST_THRESHOLD_MS to complete.
*/
private void logSlowRequests(long requestLifetime, Request<?> request,
byte[] responseContents, StatusLine statusLine) {
if (DEBUG || requestLifetime > SLOW_REQUEST_THRESHOLD_MS) {
VolleyLog.d("HTTP response for request=<%s> [lifetime=%d], [size=%s], " +
"[rc=%d], [retryCount=%s]", request, requestLifetime,
responseContents != null ? responseContents.length : "null",
statusLine.getStatusCode(), request.getRetryPolicy().getCurrentRetryCount());
}
}
...
// if the request is slow, log it.
long requestLifetime = SystemClock.elapsedRealtime() - requestStart;
logSlowRequests(requestLifetime, request, responseContents, statusLine);
...
因此,如果您的项目将Google的凌空作为一个模块(而不是JAR文件),那么您可以更新BasicNetwork。java,例如,增加SLOW\u REQUEST\u THRESHOLD\u MS的值,可能是10000(MS)或更多。
另一种选择,根据@神经元对以下问题的回答:
如何在Android截击中优化网络队列?(截击谷歌IO 2013)
我认为您可以尝试在应用程序中使用以下构造函数来增加NETWORK_THREAD_POOL_SIZE的值:
public RequestQueue(Cache cache, Network network, int threadPoolSize) {
this(cache, network, threadPoolSize,
new ExecutorDelivery(new Handler(Looper.getMainLooper()))); }
附言:如果你只想要线路BasicNetwork。logSlowRequests:HTTP请求响应不再显示,而不增加NETWORK\u THREAD\u POOL\u大小,只需要注释(
///code>)行
logSlowRequests
以上(当你的应用程序使用谷歌的凌空作为一个模块-不是jar文件,不是编译mcxiaoke…
在.gradle.gradle中)
希望有帮助!
大约两个月来,我一直试图解决这个问题,但并没有找到任何完美的解决方案。尽管我分析了以下事实:
因此,我认为这个问题并不是凌空截击中的具体问题,但如果您遇到了这个问题,那么我建议您通过自定义以下RetryPolicy来提高服务器性能:
int x=2;// retry count
request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48,
x, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
希望这会有所帮助。
欢迎提出建议:)
如果您找到了更合适的解决方案,请在下面进行评论。
谢谢
我想在应用程序启动时加载一些数据,这些数据将被所有活动使用。我在应用程序的onCreate方法中这样做,因为我希望在显示任何活动之前下载这些数据,所以我尝试使用RequestFuture发出同步请求。但是,始终会抛出TimeoutException。 什么是获得应用程序范围的数据的最佳方式,记住没有一个活动是首先启动的?
我相信我可能不了解gRPC通道、存根和传输的工作原理。我有一个Android应用程序,它创建一个通道和一个阻塞存根,并在应用程序初始化时使用dagger将其注入。当我需要进行grpc调用时,我的客户机中有一个方法,它使用该存根调用一个方法。应用程序闲置一段时间后,所有my calls return Dutaline\u都出现了错误,尽管服务器日志中没有显示任何呼叫。 其中,我的客户机类有一个函数,
本文向大家介绍Android使用httpPost向服务器发送请求的方法,包括了Android使用httpPost向服务器发送请求的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android使用httpPost向服务器发送请求的方法。分享给大家供大家参考,具体如下: 可以直接用的完整类。 希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍如何使用Swift在iOS App上发出HTTP请求?,包括了如何使用Swift在iOS App上发出HTTP请求?的使用技巧和注意事项,需要的朋友参考一下 要在iOS中发出http请求,我们将使用DataTask和会话。我们将创建配置,会话,URL,请求和dataTask对象。让我们看看我们将要执行的步骤。 HTTP请求的类型可以不同,这取决于我们要对服务器发出的请求类型。以下是请
我尝试发送一个删除请求到我的服务器,但我得到一个400坏的请求错误代码。我找了很多,但我找不到任何有帮助解决方案。当我尝试与邮差,请求工作良好。 这是来自Postman的curl命令的外观: 这是我的Java代码: 我还尝试在头中不设置Content-Type,但当我得到一个415错误时,我还删除了getBodyContentType()方法,但这也没有改变。 还有什么能帮上忙的点子吗?
我在heroku服务器上部署了nodejs代码。 我面临H12请求超时问题 这是与pgsql的db连接,它是异步的 这是我如何调用这个数据库 以及立面功能 同样的编码在本地工作,它也在heroku工作。但是突然间我得到了这个问题。有什么帮助吗?