gpt4 book ai didi

android - 让 Robolectric 与 Volley 一起工作

转载 作者:可可西里 更新时间:2023-11-01 18:45:48 26 4
gpt4 key购买 nike

我正在尝试让 Volley 与 Robolectric 合作。我可以看到我的 HTTP 请求被调用,并且 parseNetworkResponse 被调用(我正在发送 JsonRequest 的自定义子类),但我的监听器没有被调用。有什么建议吗?这是一个代码示例:

@Test
public void testTypeAheadClient() throws Exception {
Robolectric.getFakeHttpLayer().interceptHttpRequests(false);
//mRemoteRequestQueue and mCustomRequest are set up previously
mRemoteRequestQueue.add(mCustomRequest);
}

private static class CustomRequest extends JsonRequest<MyObject> {
public CustomRequest(String url,
Response.Listener<MyObject> listener,
Response.ErrorListener errorListener) {
super(Request.Method.GET, url, null, listener, errorListener);
}

@Override
protected Response<MyObject> parseNetworkResponse(NetworkResponse response) {
System.out.println("in parseNetworkResponse");
try {
MyObject myObject = new MyObject(new JSONArray(new String(response.data, "UTF-8")));
return Response.success(myObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (Exception e) {
e.printStackTrace();
return Response.error(new ParseError(e));
}
}
}

最佳答案

我通过将 RequestQueue 的 ResponseDelivery 替换为不使用 Looper.getMainLooper() 而使用新的 Executor 的 ResponseDelivery 来解决同样的问题。示例代码:

public static RequestQueue newRequestQueueForTest(final Context context, final OkHttpClient okHttpClient) {
final File cacheDir = new File(context.getCacheDir(), "volley");

final Network network = new BasicNetwork(new OkHttpStack(okHttpClient));

final ResponseDelivery responseDelivery = new ExecutorDelivery(Executors.newSingleThreadExecutor());

final RequestQueue queue =
new RequestQueue(
new DiskBasedCache(cacheDir),
network,
4,
responseDelivery);

queue.start();

return queue;
}

注意:使用 Robolectric-2.2-SNAPSHOT,之前的版本与 Volley 不兼容。

希望对你有帮助

关于android - 让 Robolectric 与 Volley 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com