如果花费太长时间,Volley不会获得响应

时间:2017-12-02 20:33:46

标签: android android-volley

我试图从我的网站上获取回复,但是我的网站需要大约3到5秒才能回复,因为该网站会根据输入进行大量计算。

我尝试使用volley for android来获取响应,但它没有给出响应也没有任何错误。当我更改我的网站代码以便它只返回文本而不进行计算(响应时间不到一秒)时,凌空给我回复。

所以我非常确定问题是因为响应需要很长时间。

这是我的代码:

public class ADMRequest extends StringRequest {
    private static final String GET_ADM_LINK = "http://www.example.com";


    private Map<String, String> params;

    public ADMRequest(String s1, Response.Listener<String> listener) {

        super(Method.POST, GET_ADM_LINK, listener, null);
        params = new HashMap<>();
        params.put("rs",s1);

    }


    @Override
    public Map<String, String> getParams() {

        return params;

    }
}

MainActivity.java:

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("Response", "1");
        Response.Listener<String>() {
            @Override
            public void onResponse(String response) {


                Log.e("Response", "2");
                Log.e("Response", response);
                Log.e("Response", "3");



                finish();

            }
        };

        Log.e("Response", "4");
        ADMRequest admrequest = new ADMRequest("text", responselis);
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        queue.add(admrequest);
        Log.e("Response", "5");

    }
}

当记录网站花费太长时间(1 4 5)时,会记录快速响应(1 4 5 2 responseHere 3)。

2 个答案:

答案 0 :(得分:1)

默认情况下,排球请求uses a DefaultRetryPolicy,默认为默认超时DEFAULT_TIMEOUT_MS set to 2.5 seconds

在您的请求中设置一个新的RetryPolicy作为类声明的一部分:

public class ADMRequest extends StringRequest {
    private static final String GET_ADM_LINK = "http://www.example.com";

    private Map<String, String> params;

    public ADMRequest(String s1, Response.Listener<String> listener) {

        super(Method.POST, GET_ADM_LINK, listener, null);

        setRetryPolicy(new DefaultRetryPolicy(10000, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT);

        params = new HashMap<>();
        params.put("rs",s1);
    }

    @Override
    public Map<String, String> getParams() {
        return params;
    }
}

答案 1 :(得分:0)

试试这个:

stringRequest.setRetryPolicy(new DefaultRetryPolicy(10000,0,100000f));

在这里你可以覆盖凌空的重试策略。喜欢:第一个参数是初始TimeOut在MilliSeconds.So如果你增加它,网络呼叫的时间将会增加。

希望,这有帮助。