排球如何订购请求

时间:2013-10-22 11:53:29

标签: android request android-volley

我想要背靠背调用3种服务方法(A B和C)。重要的一点是必须在收到A的响应和B和C之间相同的情况后调用B.我使用RequestQueue.add(...)将所有请求添加到队列中。但是现在在接收来自A的响应之前调用了请求B.是否可以使用齐射库来管理它。

我知道我可以在收到A的回复后请求B,但我想知道可以使用排球吗。

2 个答案:

答案 0 :(得分:2)

您可以实现自己的Response侦听器,以便在响应回调方法中调用A到B和B到C.

这里有一个简单的例子:https://stackoverflow.com/a/17278867/508126

Volley不能自己做,但是如果你实现了Response.Listener并在其中添加你的逻辑就可以做到这一点

答案 1 :(得分:2)

您无法向订单发出请求,但您可以让它们一个接一个地运行。为此,您需要实现自己的 RequestQueue

下面的示例演示了如何使所有请求以相同的顺序执行,并将它们添加到队列中,因为它使用单线程执行。

// Copied from Volley.newRequestQueue(..); source code
File cacheDir = new File(context.getCacheDir(), "def_cahce_dir");

String userAgent = "volley/0";
try {
    String packageName = context.getPackageName();
    PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
    userAgent = packageName + "/" + info.versionCode;
} catch (PackageManager.NameNotFoundException e) {
}

if (stack == null) {
    if (Build.VERSION.SDK_INT >= 9) {
        stack = new HurlStack();
    } else {
        // Prior to Gingerbread, HttpUrlConnection was unreliable.
        // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
        stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
    }
}

int threadPoolSize = 1; // means only one request at a time
RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network, threadPoolSize);
queue.start();