【问题标题】:Connection Timeout Android连接超时安卓
【发布时间】:2024-05-29 15:40:02
【问题描述】:

我有一个 android 应用程序,我在其中点击了一个 Web 服务并获得了结果。 现在我想要的是,如果获取结果的时间过长或者在请求之间互联网连接消失了,那么我会向用户显示一条消息或一个对话框,说明您的连接超时 我已经尝试过这段代码,但这不起作用 任何帮助将不胜感激

blic void getVolleyTask(Context context,
        final IVolleyReponse responseContext, String URL) {
    RequestQueue request = Volley.newRequestQueue(context);
    StringRequest strReq = new StringRequest(Request.Method.GET, URL,
            new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    try {
                        if (response != null) {
                            JSONArray _array = new JSONArray(response);
                            responseContext.ResponseOk(_array);
                        } else {
                            responseContext.ResponseOk(null);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        responseContext.ResponseOk(null);
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    responseContext.ErrorBlock();
                }
            });
    strReq.setRetryPolicy(new DefaultRetryPolicy(socketTimeout, maxTries,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    request.add(strReq);
}


       public void getVolleyPostTask(Context context,
        final IVolleyJSONReponse jsonResponseContext, String URL,
        JSONObject obj) {
    RequestQueue request = Volley.newRequestQueue(context);
    JsonObjectRequest myRequest = new JsonObjectRequest(
            Request.Method.POST, URL, obj,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    jsonResponseContext.ResponseOk(response);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    jsonResponseContext.ErrorBlock();
                }
            }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            return headers;
        }
    };
    myRequest.setRetryPolicy(new DefaultRetryPolicy(socketTimeout,
            maxTries, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    request.add(myRequest);
}

提前致谢!

【问题讨论】:

  • 您是否检查过您要发送请愿书的网站是否可用?
  • 这是我正在使用的网络服务
  • 你检查过这个网络服务是否存在吗?

标签: android web connection connection-timeout httpconnection


【解决方案1】:

VollyJson 库能够在与 web 服务通信时区分不同的网络错误。当 JSONObjectRequest 出现问题时会调用 onErrorResponse,您可以通过以下方式区分错误。

public void onErrorResponse(VolleyError error) {

    if (error instanceof TimeoutError || error instanceof NoConnectionError)     {
        //Write Your code here
    } else if (error instanceof AuthFailureError) {
        //TODO
    } else if (error instanceof ServerError) {
       //TODO
    } else if (error instanceof NetworkError) {
      //TODO
    } else if (error instanceof ParseError) {
       //TODO
    }

【讨论】: