我有以下代码可以调用并接收xml。
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Do something with the response
Log.e(TAG, "response from RRSendCarerLocation = " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Handle error
Log.e(TAG, "error: RRSendCarerLocation = " + error);
}
});
rq.add(stringRequest);
我遇到的问题是,从Activity调用时这可行,但我想从IntentService使用Volley。工作完成后,intentService会自行销毁,因此Volley回调永远不会撤消响应。
我发现的一个解决方案是使用RequestFuture并调用.get()来阻塞线程。我在这里找到了一个例子。
Can I do a synchronous request with volley?
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest request = new JsonObjectRequest(URL, new JSONObject(), future, future);
requestQueue.add(request);
try {
return future.get(30, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// exception handling
} catch (ExecutionException e) {
// exception handling
} catch (TimeoutException e) {
// exception handling
}
我不想使用JSON,因为服务器返回xml。我查看了StringRequest类,但是我看不到任何支持RequestFuture的内容。
http://griosf.github.io/android-volley/com/android/volley/toolbox/StringRequest.html
无论如何使用StringRequest代码使用RequestFuture的阻止功能返回xml
感谢
答案 0 :(得分:0)
我对这类请求使用Retrofit。它非常易于使用,允许您进行两种类型的请求(同步和非同步) http://square.github.io/retrofit/
答案 1 :(得分:0)
以防万一您找不到最佳解决方案或任何遇到此问题的人。如果要将StringRequest与FutureRequest一起使用,可以尝试以下解决方案。
with your_data as (
select stack(1, array(
'{"id":"123","name":"ABC","age":"18","subject":"Maths","score":20}',
'{"id":"124","name":"ABCD","age":"20","subject":"History","score":40}',
'{"id":"213","name":"XYZ","age":"28","subject":"Economics","score":35}')
) as json_array
)
select --t.json_array as initial_data,
--a.json,
get_json_object(a.json, '$.id') id,
get_json_object(a.json, '$.name') name,
get_json_object(a.json, '$.age') age,
get_json_object(a.json, '$.subject') subject,
get_json_object(a.json, '$.score') score
from your_data t
lateral view outer explode(json_array) a as json
where get_json_object(a.json, '$.id') = 123 ;