Android系统。使用RequestFuture get()和AsyncTask

时间:2016-02-20 22:35:29

标签: android android-asynctask httprequest android-volley synchronous

我想我需要一些android volley的帮助。我正在尝试创建一个简单的HTTP请求并等待响应,因为我需要响应数据以进行进一步处理。我已经尝试了三天了,但还没有完成它。

基本上我想点击一个按钮 - >提出请求 - >得到回复 - >处理它 - >根据之前的回复提出新请求 - >处理secon响应 - >然后在我的活动中显示结果。

按照建议在AsysncTask中启动请求,但它总是在没有响应的情况下超时。我希望你能帮助我。

public class Connection extends AsyncTask<Object, Void, String>{

private static RequestQueue queue;

@Override
protected String doInBackground(Object... params) {
    String response = null;
    Context context = (Context) params[0];
    String url = (String) params[1];

    queue = getQueue(context.getApplicationContext());

    RequestFuture<String> future = RequestFuture.newFuture();
    StringRequest request = new StringRequest(Request.Method.GET, url, future, future);
    queue.add(request);

    try {
        response = future.get(5, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (TimeoutException e) {
        e.printStackTrace();
    }
    return response;
}

private static RequestQueue getQueue(Context context) {
    if (queue == null) {
        queue = Volley.newRequestQueue(context.getApplicationContext());
    }
    return queue;
}

}

调用是从额外的线程开始的:

public class MyThread extends Thread {
    @Override
    public synchronized void start() {
        super.start();
        String url = UrlRequestGenerator.buildUrl(originLat, originLong, context); // context from calling activity
        try {
            response = new HAFASConnection().execute(context, url).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        System.out.println(response);
    }

}

1 个答案:

答案 0 :(得分:0)

我最近这样做但是在同一个帖子里。如果可行,您可以先在同一个线程中查看。如果没有,则表示它可能来自您的网址。

        RequestQueue queue = Volley.newRequestQueue(getBaseContext());
        String url ="http://....";

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        finish();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyError r = error;
            }
        });
        queue.add(stringRequest);

如果它继续onErrorResponse,请检查您的网址和服务器。