Android开发(使用Java)中 client.newCall(request).execute() 语句永久阻塞的问题

小白,开发安卓的小型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"
运行就正常了!

图片说明
我的电脑防火墙已经全部关闭

好吧,我们组这几天时间特紧,又不是这个专业的,没有必要花太大功夫。我就自问自答取消这个问题吧。

大佬能看看安卓端如何向web端发送请求的吗?

web端接口:
@RequestMapping("/receiveMessage")
    public String receiveMessage(@RequestBody User u) 
        return "success";
    }
    

安卓端:public class HttpUtils {
    private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

    private static final OkHttpClient client = new OkHttpClient();


    public static String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(json, JSON);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response = client.newCall(request).execute();
            return response.body().string();
    }
}     
main: new Thread(new Runnable() {
            @Override
            public void run() {
                String url = "http://192.168.1.107:8080/receiveMessage";
                String json = "{\"name\":\"lst\",\"age\":20}";
                String response = null;
                try {
                    response = HttpUtils.post(url, json);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

请问
web端报400错误 该如何解决呢?

https://blog.csdn.net/u014616515/article/details/52202942