我是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()以查看请求是否已完成且似乎没有。 我已经在互联网上搜索但从未找到一个好的解决方案,并且凌空文档不是很有帮助-_- 请帮帮我 !
答案 0 :(得分:0)
我是android的初学者。
欢迎!
我的问题是,我的未来永远不会被解决,我的应用程序也会受阻。
“永远不会解决”是什么意思?
首先我知道为什么我的应用程序被阻止,因为我在主线程上使用get()方法,但我需要这样做,因为我需要结果来发出下一个请求所以我需要等待响应。
您不需要来执行此操作。您可以在显示微调器或其他UI以显示进度时发出第一个请求,然后在第一个请求完成时启动下一个请求。
我的问题是,我不知道为什么我的要求和我的未来永远不会解决。这里是我主要活动的代码:
再一次,“解决”是什么意思?您是否debugged your app查看正在抛出的错误或异常?