小白,开发安卓的小型app,希望使用http的post方法向云端服务器发送json文件,然后获取云端返回的json,以此实现相关操作(比如向服务器发送包含用户名和密码的json文件,然后接收返回的json文件,解析,决定是否允许登录)
由于楼主是学生,暂时付不起云主机的钱,所以和同伴一起在局域网内建立了一个服务器用来前期进行调试。可是在编写android端代码的时候,遇到了问题,就是老是阻塞在一个地方:execute()
下面是代码:
//访问云端服务器,获得登录授权
private boolean getAuthorization() {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建Client对象
Log.d(debugTag, "创建Client对象");
OkHttpClient client = new OkHttpClient();
//创建request对象
Log.d(debugTag, "创建request对象");
Request request = new Request.Builder()
.url("http://10.0.2.2/data")
.build();
//创建response对象
Log.d(debugTag, "创建response对象");
Response response = client.newCall(request).execute();
//获取返回值
Log.d(debugTag, "获取返回值");
String data = response.body().string();
//打印
}catch (Exception e) {
e.printStackTrace();
}
}
}).start();
return false;
}
这里同伴不在身边,所以就暂时在我电脑上用Apache搭了一个localhost
文件结构:
data文件的内容:{ "UserName":"John" , "PassWord":"123123" }
用电脑访问的结果:
用Postman访问结果:
用手机模拟器的浏览器访问结果:
都是没有问题的
但是用我自己写的代码访问就不行(上面代码在Android Studio的日志窗口的运行结果):
可以发现只运行到了“创建response对象”那一步,之后的execute()永远阻塞住了
但是改一下上面代码的url,改成"https://api.github.com/markdown/raw"
运行就正常了!
我的电脑防火墙已经全部关闭