<uses-permission android:name="android.permission.INTERNET" />
步骤 | 操作说明 | 代码示例 |
---|---|---|
添加依赖 | 在build.gradle 中添加OkHttp和Gson |
groovy<br> implementation 'com.squareup.okhttp3:okhttp:4.11.0'<br> implementation 'com.google.code.gson:gson:2.10.1' |
创建数据模型 | 定义与JSON结构对应的Java类 | java<br> public class User {<br> String name;<br> int age;<br> } |
JSON序列化 | 使用Gson将对象转为JSON字符串 | java<br> Gson gson = new Gson();<br> String json = gson.toJson(new User("Alice", 25)); |
构建请求体 | 创建JSON格式的RequestBody | java<br> RequestBody body = RequestBody.create(json, MediaType.get("application/json")); |
发送网络请求 | 使用OkHttp发送POST请求 | java<br> OkHttpClient client = new OkHttpClient();<br> Request request = new Request.Builder()<br> .url("https://example.com/api")<br> .post(body)<br> .build();<br> client.newCall(request).enqueue(callback); |
处理响应 | 通过Callback处理服务器返回 | java<br> callback = new Callback() {<br> @Override<br> public void onFailure(Call call, IOException e) {<br> // 处理网络错误<br> }<br> @Override<br> public void onResponse(Call call, Response response) throws IOException {<br> if (response.isSuccessful()) {<br> // 处理成功逻辑<br> } else {<br> // 处理错误状态码<br> }<br> }<br> }; |
// 1. 定义数据模型 public class User { String name; int age; public User(String name, int age) { this.name = name; this.age = age; } } // 2. 发送JSON请求 public void sendJson() { // 初始化Gson和OkHttp Gson gson = new Gson(); OkHttpClient client = new OkHttpClient(); // 创建数据对象并序列化 User user = new User("Alice", 25); String json = gson.toJson(user); // 构建请求体 RequestBody body = RequestBody.create(json, MediaType.get("application/json")); // 创建请求 Request request = new Request.Builder() .url("https://example.com/api/users") .post(body) .build(); // 异步发送请求 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("NetworkError", e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String responseData = response.body().string(); Log.d("Response", responseData); } else { Log.e("ServerError", "Code: " + response.code()); } } }); }
问题现象 | 解决方案 |
---|---|
SSL证书验证失败 | 添加信任所有证书的配置(仅开发环境):OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(trustManager.getSocketFactory(), trustManager).build(); |
中文乱码问题 | 确保服务器支持UTF-8编码,并在请求头添加:.addHeader("Content-Type", "application/json; charset=utf-8") |
跨域请求被拒 | 在服务器端配置CORS响应头(如:Access-Control-Allow-Origin: ) |
A:在onResponse
回调中,通过response.body().string()
获取原始数据,然后使用Gson反序列化:
String responseData = response.body().string(); YourModel model = gson.fromJson(responseData, YourModel.class);
A:通过runOnUiThread
方法切换到主线程:
@Override public void onResponse(Call call, Response response) { handler.post(() -> { // 更新UI操作,如显示Toast或修改TextView textView.setText("上传成功"); }); }