You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端如何发送HTTP POST请求并处理服务端返回数据

Android端HTTP请求发送及响应处理方案

前置必备配置

  • 添加网络权限,在AndroidManifest.xml的manifest标签下添加:
<uses-permission android:name="android.permission.INTERNET" />
  • 若你的服务端地址是HTTP(非HTTPS),需要在AndroidManifest.xml的application标签中添加属性,允许明文流量请求:
<application
    ...
    android:usesCleartextTraffic="true"
    ...>
  • 导入主流网络请求库OkHttp依赖,在Module级build.gradle的dependencies代码块中添加如下配置,同步项目即可:
implementation 'com.squareup.okhttp3:okhttp:4.12.0'

请求发送与响应处理实现

你可以直接使用OkHttp的异步请求方案,无需自己手动创建子线程,库会自动完成子线程请求、主线程回调的逻辑,示例代码如下:

// 1. 构建OkHttpClient实例
OkHttpClient client = new OkHttpClient();

// 2. 构建请求对象,替换为你自己的请求地址
String url = "http://xxx.xxx.xxx.xxx/myapp/api.php?action=add&name=johndoe";
Request request = new Request.Builder()
        .url(url)
        .get() // 你当前用的是GET请求,参数直接拼在URL里,所以用get方法
        .build();

// 3. 发起异步请求
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) {
        // 请求失败回调,运行在子线程,如需操作UI要切换到主线程
        e.printStackTrace();
        Log.e("HTTP请求失败", e.getMessage());
    }

    @Override
    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
        // 请求成功回调,运行在子线程,如需操作UI要切换到主线程
        if (!response.isSuccessful()) {
            // 响应码非200-299范围的异常情况
            Log.e("HTTP响应异常", "响应码:" + response.code());
            return;
        }
        // 获取服务端返回的响应体内容
        String responseBody = response.body().string();
        Log.d("HTTP响应内容", responseBody);
        
        // 接下来处理响应,假设你的PHP接口返回JSON格式数据,示例解析逻辑:
        try {
            JSONObject jsonObject = new JSONObject(responseBody);
            int code = jsonObject.getInt("code");
            String msg = jsonObject.getString("msg");
            // 按需处理返回的字段即可
            if (code == 200) {
                // 逻辑处理成功
            } else {
                // 逻辑处理失败
            }
        } catch (JSONException e) {
            e.printStackTrace();
            Log.e("JSON解析失败", e.getMessage());
        }

        // 如需在回调中更新UI,使用如下方式切换到主线程
        // runOnUiThread(() -> {
        //     这里写更新UI的逻辑
        // });
    }
});

原生Stream方案失败的常见原因

  • 未配置网络权限或明文请求限制,请求直接被系统拦截
  • 未设置请求超时、请求方式错误,未处理IO异常导致崩溃
  • 流读写时未指定编码,参数传输乱码导致服务端接收异常
  • 响应结束后未关闭流资源,导致内存泄漏或后续请求异常

内容的提问来源于stack exchange,提问作者einstamas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:54:04