[英]Solving Future with android-Volley
我是android的初学者。 我有一个项目,我在API上对应用程序进行GET请求,我用凌空抽空提出请求和未来。 我的问题是我的未来永远都无法解决,我的应用程序也被阻止了。 首先,我知道为什么我的应用程序被阻止,因为我在主线程上使用了get()方法,但是我需要这样做,因为我需要发出下一个请求的结果,所以我需要等待响应。 我的问题是,我不知道为什么我的要求和未来永远都无法解决。 这是我主要活动的代码:
private void populateSummoner(String region, String summonerName)throws JSONException {
RequestFuture<JSONObject> summonerDataFutur;
summonerDataFutur = requestData.requestSummonerData(region, summonerName);
try {
summoner = FactorySummoner.CreateSummoner(summonerDataFutur.get(3, TimeUnit.SECONDS));
} catch (TimeoutException e) {
Log.i(TAG,"Solving the summunerFuture timed Out "+ e.getMessage());
e.printStackTrace();
}catch (InterruptedException e){
Log.i(TAG,"Solving the summunerFuture was interrupt "+ e.getMessage());
}catch (ExecutionException e){
Log.i(TAG,"Solving the summunerFuture leads to an error "+ e.getMessage());
}
}
我创建了一个用于管理其他请求的类,其中包含请求功能
public class RequestData {
private static final String TAG = "RequestData";
private RequestQueue queue;
public RequestData(Context context){
queue = Volley.newRequestQueue(context);
queue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener<JsonObjectRequest>() {
@Override
public void onRequestFinished(Request<JsonObjectRequest> request) {
Log.i(TAG,"fin d'une requete " + request.toString());
try {
Log.i(TAG, request.getBody().toString());
} catch (AuthFailureError authFailureError) {
authFailureError.printStackTrace();
}
}
});
}
public RequestFuture<JSONObject> requestSummonerData(String region, String summonerName){
Log.i(TAG,"Begin RequestData for summoner : "+summonerName+" on region : "+region);
final StringBuilder builder = new StringBuilder();
builder.append(Utils.HTTPS);
builder.append(getRegionUrl(region));
builder.append(Utils.REQUEST_SUMMONER);
builder.append(summonerName);
builder.append(Utils.API_KEY);
Log.i(TAG, "url built : "+builder.toString());
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest jsObjRequest = new JsonObjectRequest(builder.toString(),null,future,future);
queue.add(jsObjRequest);
return future;
}
private String getRegionUrl(String region){
String url="";
if (Utils.HOST_ADDRESS.containsKey(region)){
url = Utils.HOST_ADDRESS.get(region);
}
else{
//todo implement exception
Log.i(TAG, "no host address for this region");
}
Log.i(TAG,"Server address : "+url);
return url;
}
}
如您所见,我已经尝试在队列上实现onRequestFinished(),以查看请求是否已完成,似乎还没有完成。 我已经在互联网上搜索了,但从未找到好的解决方案,并且排球文档不是很有帮助-_-请帮助我!
我是android的初学者。
欢迎!
我的问题是我的未来永远都无法解决,我的应用程序也被阻止了。
“永不解决”是什么意思?
首先,我知道为什么我的应用程序被阻止,因为我在主线程上使用了get()方法,但是我需要这样做,因为我需要发出下一个请求的结果,所以我需要等待响应。
您不需要这样做。 您可以在显示微调框或其他UI来指示进度时发出第一个请求,然后在第一个请求完成时启动下一个请求。
我的问题是,我不知道为什么我的要求和未来永远都无法解决。 这是我主要活动的代码:
同样,“解决”是什么意思? 您是否调试了应用程序以查看引发了哪些错误或异常?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.