我在一个项目中使用Volley框架,我总是需要自己处理重定向来处理标题.
如何处理重定向现在取决于方法和传输层.我想使用Volley的默认值(自动选择传输层)而不更改任何Volley代码.
一个有效的解决方案是始终使用OkHttp作为传输层(如Issues and contribution for Volley中所述),但我想知道是否存在没有其他框架的方法.
编辑:
我更喜欢使用OkHttp,这样我就不必管理自己在Android上使用的版本,但是当想要改变传输层行为时,Itai Hanski提供的解决方案非常好.
解决方法
我认为将
Volley that uses OkHttp的HttpStack实现作为其传输是最佳解决方案
RequestQueue queue = Volley.newRequestQueue(this); Network network = new BasicNetwork(new OkHttpStack()); RequestQueue queue = new RequestQueue(new DiskBasedCache(new File(getCacheDir(),"volley")),network); queue.start();
OkHttpStack类:
public class OkHttpStack extends HurlStack { private final OkHttpClient client; public OkHttpStack() { this(new OkHttpClient()); } public OkHttpStack(OkHttpClient client) { if (client == null) { throw new NullPointerException("Client must not be null."); } this.client = client; } @Override protected HttpURLConnection createConnection(URL url) throws IOException { return client.open(url); } }
更新:
如果您使用的是新版本的okhttp堆栈,请使用
public class OkHttpStack extends HurlStack { private final OkUrlFactory mFactory; public OkHttpStack() { this(new OkHttpClient()); } public OkHttpStack(OkHttpClient client) { if (client == null) { throw new NullPointerException("Client must not be null."); } mFactory = new OkUrlFactory(client); } @Override protected HttpURLConnection createConnection(URL url) throws IOException { return mFactory.open(url); } }