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
相关产品推荐
相关产品推荐

