使用MockWebServer时遭遇UnknownHostException问题求助
解决MockWebServer遇到UnknownHostException的问题
嘿,这个坑我之前也踩过!你碰到的UnknownHostException核心原因特别明确:你没有使用MockWebServer生成的模拟服务器地址,反而用了一个压根不存在的外部域名some-mock-url.com,系统解析不了这个虚构的主机,自然就抛出错误了。
MockWebServer的工作逻辑是这样的:它会在你的本地设备(或模拟器)上启动一个临时HTTP服务器实例,默认绑定localhost并随机分配端口。你必须用它提供的专属URL发起请求,而不是自己随便写一个域名。
具体修正步骤:
- 启动MockWebServer后,调用
server.url("/")获取它的基础访问地址,这个地址是真实可用的本地模拟服务器入口 - 用这个基础地址替换掉你原来自定义的
http://some-mock-url.com来构建请求 - 测试结束后记得调用
server.shutdown()关闭服务器,避免资源占用
修正后的完整测试代码:
@Test public void myTest() throws IOException, InterruptedException { MockWebServer server = new MockWebServer(); // 预存模拟响应内容 server.enqueue(new MockResponse().setBody("Something not valid JSON response")); server.start(); // 获取MockWebServer的真实基础URL,这才是你该用的请求地址 String baseUrl = server.url("/").toString(); final CountDownLatch signal = new CountDownLatch(1); AndroidNetworking.get(baseUrl) .addQueryParameter("some_key", "some_value12345") .addHeaders("token", "token_1231234") .build() .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { signal.countDown(); Log.i("Response", "jsonObject: " + response); } @Override public void onError(ANError anError) { signal.countDown(); Log.i("Response", "error: " + anError.getMessage()); } }); signal.await(); // 测试完成后关闭服务器释放资源 server.shutdown(); }
另外补充一句:你在Manifest里配置的网络权限、添加的MockWebServer依赖都是完全正确的,问题就出在URL的使用方式上而已~
内容的提问来源于stack exchange,提问作者Adam Varhegyi
相关产品推荐
相关产品推荐

