android使用okhttp3连接springboot

daniel350-wang / 2024-03-13 / 原文

首先在build.gradle.kts中导入依赖

在dependencies{}中添加以下代码

implementation("com.squareup.okhttp3:okhttp:4.9.1")

之后在MainActivity中加入以下代码

private OkHttpClient client = new OkHttpClient();
    private void sendPostRequest(User user) {
        // 构造 JSON 格式的请求体
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        String json = "{\"name\":\"" + user.getName() + "\","
                + "\"teacher\":\"" + user.getTeacher() + "\","
                + "\"place\":\"" + user.getPlace() + "\""
                + "}";
        RequestBody body = RequestBody.create(json, JSON);

        // 构造 POST 请求
        Request request = new Request.Builder()
                .url("http://192.168.192.191:8080/user") // 替换为你的后端接口地址
                .post(body)
                .build();

        // 发送请求并处理响应
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                // 处理请求失败情况
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                }
                Log.e("TAG", "onResponse: 连接成功" );
                // 处理请求成功情况
                String responseData = response.body().string();
                // 在这里处理服务器返回的数据
            }
        });
    }

然后直接调用这个sendPostRequest(User user)就能将信息发送到后端了..............................当然不行啦

这时候会报错,错误表明你的应用程序尝试通过明文文本(CLEARTEXT)通信与一个 IP 地址为 192.168.192.191(我的ipv4地址) 的服务器进行通信,但是在当前的网络安全策略下,这种明文通信是被禁止的。

为了解决这个问题,你可以采取以下步骤之一:

 

    • 使用 HTTPS 进行通信: 建议你在应用程序中使用 HTTPS 加密协议来加密通信,而不是使用明文文本。这样可以保护通信的安全性。请确保你的后端服务器支持 HTTPS,并且在应用程序中将 URL 改为 HTTPS 格式。

    • 允许明文通信(不推荐): 如果你的后端服务器仍然在使用明文 HTTP 协议,并且你希望继续允许明文通信,你可以在 AndroidManifest.xml 文件中添加一个 <application> 标签,并在其中添加 android:usesCleartextTraffic="true" 属性。但是请注意,这样做会降低通信的安全性,不推荐在生产环境中使用。

 

我还不会让我的后端服务器支持 HTTPS,于是我选择第二种,在 AndroidManifest.xml 文件中添加一个 <application> 标签,并在其中添加 android:usesCleartextTraffic="true" 属性,就像这样:

 使用网络权限要记得在追加一行

<uses-permission android:name="android.permission.INTERNET" />
如上图.
这样我们就可以在MainActivity中使用sendPostRequest(User user)方法来向springboot发送post请求了