繁体   English   中英

用Android-Volley解决未来

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM