当前位置:首页 > 行业动态 > 正文

安卓发送json给服务器

安卓发送JSON至服务器需创建 JSONObject,通过HttpURLConnection配置POST请求,设置Content-Type为application/json,输出流写入数据,处理响应与异常

安卓发送JSON给服务器实现指南


环境准备

  1. Android Studio版本:建议使用最新版本(如Android Studio Giraffe)
  2. 依赖库
    • OkHttp(网络请求)
    • Gson(JSON处理)
  3. 权限配置
    <uses-permission android:name="android.permission.INTERNET" />

核心实现步骤

步骤 操作说明 代码示例
添加依赖 build.gradle中添加OkHttp和Gson groovy<br>&nbsp;implementation 'com.squareup.okhttp3:okhttp:4.11.0'<br>&nbsp;implementation 'com.google.code.gson:gson:2.10.1'
创建数据模型 定义与JSON结构对应的Java类 java<br>&nbsp;public class User {<br>&nbsp;&nbsp;String name;<br>&nbsp;&nbsp;int age;<br>&nbsp;}
JSON序列化 使用Gson将对象转为JSON字符串 java<br>&nbsp;Gson gson = new Gson();<br>&nbsp;String json = gson.toJson(new User("Alice", 25));
构建请求体 创建JSON格式的RequestBody java<br>&nbsp;RequestBody body = RequestBody.create(json, MediaType.get("application/json"));
发送网络请求 使用OkHttp发送POST请求 java<br>&nbsp;OkHttpClient client = new OkHttpClient();<br>&nbsp;Request request = new Request.Builder()<br>&nbsp;&nbsp;.url("https://example.com/api")<br>&nbsp;&nbsp;.post(body)<br>&nbsp;&nbsp;.build();<br>&nbsp;client.newCall(request).enqueue(callback);
处理响应 通过Callback处理服务器返回 java<br>&nbsp;callback = new Callback() {<br>&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;public void onFailure(Call call, IOException e) {<br>&nbsp;&nbsp;&nbsp;// 处理网络错误<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;public void onResponse(Call call, Response response) throws IOException {<br>&nbsp;&nbsp;&nbsp;if (response.isSuccessful()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;// 处理成功逻辑<br>&nbsp;&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;&nbsp;// 处理错误状态码<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;};

完整代码示例

// 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:

相关问题与解答

Q1:如何接收服务器返回的JSON数据?

A:在onResponse回调中,通过response.body().string()获取原始数据,然后使用Gson反序列化:

安卓发送json给服务器

String responseData = response.body().string();
YourModel model = gson.fromJson(responseData, YourModel.class);

Q2:如何在子线程中更新UI?

A:通过runOnUiThread方法切换到主线程:

安卓发送json给服务器

@Override
public void onResponse(Call call, Response response) {
    handler.post(() -> {
        // 更新UI操作,如显示Toast或修改TextView
        textView.setText("上传成功");
    });
}