Volley超时错误

25

我正在尝试使用Volley命中一个REST服务。

public class AuthFunctions {
    private static final String LOGIN_URL = "http://10.0.2.2:8080/stewayservices/user-management/users/10";
    boolean result;
    public boolean loginUser(String email,String password){

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,LOGIN_URL,null,new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("JsonObject Response",response.toString());
                try {
                    JSONObject user = response.getJSONObject("user");
                    String firstName = user.getString("firstName");
                    if (firstName.equals("Lokesh")){
                        result = true;
                    }
                    else{
                        result = false;
                    }
                } catch (JSONException e) {
                    Log.d("Web Service Error",e.getMessage());
                    e.printStackTrace();
                }
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.d("JsonObject Error Response",volleyError.toString());
            }
        });
        request.setRetryPolicy(new DefaultRetryPolicy(500000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        AppController.getInstance().addToRequestQueue(request);
        return result;
    }
}

但是它给了我Volley超时错误。以下是Logcat记录

 D/JsonObject Error Response﹕ com.android.volley.TimeoutError

请告诉我是否做错了。这是我在stackoverflow上关于Android的第一个问题。


你确定连接到本地主机了吗?你的服务器是否在8080端口监听?你的防火墙关闭了吗? - mmlooloo
你得到任何解决方案了吗? - Pratik Butani
13个回答

53

这对我有用:

request.setRetryPolicy(new RetryPolicy() {
            @Override
            public int getCurrentTimeout() {
                return 50000;
            }

            @Override
            public int getCurrentRetryCount() {
                return 50000;
            }

            @Override
            public void retry(VolleyError error) throws VolleyError {

            }
        });

您可以更改那个时间。


22
请求设置重试策略,使用默认的重试退避倍数。具体设置为:请求超时时间为50秒,最大尝试次数为5次。代码如下: request.setRetryPolicy(new DefaultRetryPolicy( 50000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); - marmor
@marmor你的解决方案非常有帮助!Daalu nwanne!! - Uchechukwu Nnabugwu

18
com.android.volley.TimeoutError

在75%的情况下,这个错误是由于连接问题导致的。

如果你在本地主机或本地服务器上测试,请检查防火墙是否关闭。


在我的系统中禁用防火墙后,它可以正常工作。答案很好。 - Jeyaseelan

5
String url = "https://api.joind.in/v2.1/events?start=" + start + "&resultsperpage=20&format=json";
Log.i("DREG", "onLoadMoreItems: " + url);
final StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // Add Code Here
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                if (error instanceof NetworkError) {
                } else if (error instanceof ServerError) {
                } else if (error instanceof AuthFailureError) {
                } else if (error instanceof ParseError) {
                } else if (error instanceof NoConnectionError) {
                } else if (error instanceof TimeoutError) {
                    Toast.makeText(getContext(),
                            "Oops. Timeout error!",
                            Toast.LENGTH_LONG).show();
                }
            }
        }
);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
        10000,
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(stringRequest);

4
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                6000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)
        );

2
在您的错误监听器之后添加以下内容。
myRequest.setRetryPolicy(new DefaultRetryPolicy(
    MY_SOCKET_TIMEOUT_MS, 
    DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

2

当Volley无法连接到请求中提供的URL时,会引发超时错误。可能的原因包括:

1)网络连接问题。 2)URL无效。

请尝试在模拟器上运行它。模拟器应该可以正常工作,因为模拟器在同一台机器上运行,并具有与您的WAMP相同的IP地址。

要使其在真实设备上工作,请将您的设备连接到与您的WAMP服务器相同的WLAN上。如果未连接到相同的WLAN,则必须将您的PHP脚本托管到Web上。有许多免费的Web托管站点可供选择,例如https://www.000webhost.com/,请查看它们。

希望这能帮到您!


2
public void onErrorResponse(VolleyError error) {
                if (error instanceof NetworkError) {
                } else if (error instanceof ServerError) {
                } else if (error instanceof AuthFailureError) {
                } else if (error instanceof ParseError) {
                } else if (error instanceof NoConnectionError) {
                } else if (error instanceof TimeoutError) {
                    Toast.makeText(getContext(),
                            "Oops. Timeout error!",
                            Toast.LENGTH_LONG).show();
                }

1

请检查您在 URL 中的 IPv4 地址是否正确且未被更改。


1

我在Macbook上运行了一个用Python3.X编写的Django应用程序。
我需要执行以下操作:

  1. 进入系统设置
  2. 进入安全性与隐私
  3. 选择防火墙选项卡并点击防火墙选项
  4. 允许Python 3.7的传入连接

enter image description here


0

五年前的问题对于今天的问题来说很棘手。

Volley将不再接受http和IP地址,只接受带有完全限定域名(FQDN)的https。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接