我试图从我的网站上获取回复,但是我的网站需要大约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)。
答案 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如果你增加它,网络呼叫的时间将会增加。
希望,这有帮助。