我想我需要一些android volley的帮助。我正在尝试创建一个简单的HTTP请求并等待响应,因为我需要响应数据以进行进一步处理。我已经尝试了三天了,但还没有完成它。
基本上我想点击一个按钮 - >提出请求 - >得到回复 - >处理它 - >根据之前的回复提出新请求 - >处理secon响应 - >然后在我的活动中显示结果。
按照建议在AsysncTask中启动请求,但它总是在没有响应的情况下超时。我希望你能帮助我。
public class Connection extends AsyncTask<Object, Void, String>{
private static RequestQueue queue;
@Override
protected String doInBackground(Object... params) {
String response = null;
Context context = (Context) params[0];
String url = (String) params[1];
queue = getQueue(context.getApplicationContext());
RequestFuture<String> future = RequestFuture.newFuture();
StringRequest request = new StringRequest(Request.Method.GET, url, future, future);
queue.add(request);
try {
response = future.get(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
return response;
}
private static RequestQueue getQueue(Context context) {
if (queue == null) {
queue = Volley.newRequestQueue(context.getApplicationContext());
}
return queue;
}
}
调用是从额外的线程开始的:
public class MyThread extends Thread {
@Override
public synchronized void start() {
super.start();
String url = UrlRequestGenerator.buildUrl(originLat, originLong, context); // context from calling activity
try {
response = new HAFASConnection().execute(context, url).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println(response);
}
}
答案 0 :(得分:0)
我最近这样做但是在同一个帖子里。如果可行,您可以先在同一个线程中查看。如果没有,则表示它可能来自您的网址。
RequestQueue queue = Volley.newRequestQueue(getBaseContext());
String url ="http://....";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
finish();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyError r = error;
}
});
queue.add(stringRequest);
如果它继续onErrorResponse,请检查您的网址和服务器。