当前位置: 首页 > 知识库问答 >
问题:

仅在Android而非iOS上使用“凌空”发出的服务器请求超时

弓明亮
2023-03-14

在我的一个应用程序中,我使用谷歌提供的凌空截击向服务器发送请求。

问题: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)现在应用程序适用于AndroidiOSweb,但超时仅适用于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));
    

    而且我也不想重试如果连接超时。

    如何进行有效的服务调用,以解决超时问题。

    任何帮助都将受到感谢。

    谢谢

  • 共有3个答案

    满元凯
    2023-03-14
    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--->");
        }
    }
    

    设置超时时间。

    步致远
    2023-03-14

    您好,您可以参考以下内容:

    基本网络内部。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中)

    希望有帮助!

    梅逸清
    2023-03-14

    大约两个月来,我一直试图解决这个问题,但并没有找到任何完美的解决方案。尽管我分析了以下事实:

    1. 您可以升级服务器的性能

    因此,我认为这个问题并不是凌空截击中的具体问题,但如果您遇到了这个问题,那么我建议您通过自定义以下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工作。但是突然间我得到了这个问题。有什么帮助吗?