gpt4 book ai didi

android - Volley 使用 StringRequest 和 RequestFuture 进行阻塞同步调用

转载 作者:行者123 更新时间:2023-11-29 02:36:37 29 4
gpt4 key购买 nike

我有以下代码可以调用和接收 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

有没有使用 RequestFuture 的阻塞功能使用 StringRequest 代码返回 xml

谢谢

最佳答案

这是为了防止您没有找到最佳解决方案,或者任何遇到这篇文章并遇到相同问题的人。如果您想将 StringRequest 与 FutureRequest 一起使用,您可以尝试以下解决方案。

// Setup a RequestFuture object with expected return/request type 
RequestFuture<String> future = RequestFuture.newFuture();

// organize your string request object
StringRequest request = new StringRequest(url, future, future);

// add request to queue
VolleySingleton.getInstance(context).addToRequestQueue(request);

try {
// Set an interval for the request to timeout. This will block the
// worker thread and force it to wait for a response for 60 seconds
// before timing out and raising an exception
String response = future.get(60, TimeUnit.SECONDS);

// Do something with the response
Log.e(TAG, "response from RRSendCarerLocation = " + response);
return Result.success();
} catch (InterruptedException | TimeoutException | ExecutionException e) {
e.printStackTrace();
return Result.retry();
}

关于android - Volley 使用 StringRequest 和 RequestFuture 进行阻塞同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589171/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com