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

安卓处理服务器json

安卓处理服务器JSON数据流程

添加网络权限

AndroidManifest.xml 中声明网络权限:

<uses-permission android:name="android.permission.INTERNET" />

引入依赖库

推荐使用 Retrofit + Gson 组合(也可选择 OkHttp、Volley 等):

// Retrofit 网络请求库
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
// Gson 解析库
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

定义数据模型类

根据 JSON 结构创建对应的 Java/Kotlin 类,

安卓处理服务器json  第1张

// 示例 JSON: {"name":"张三","age":25,"email":"zhangsan@example.com"}
public class User {
    private String name;
    private int age;
    private String email;
    // Getter 和 Setter 方法
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // 其他字段同理...
}

创建 Retrofit 接口

定义 API 接口,

public interface ApiService {
    @GET("user/info") // 对应服务器的 API 路径
    Call<User> getUserInfo(); // 返回 User 对象
}

初始化 Retrofit

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://example.com/api/") // 替换为实际服务器地址
        .addConverterFactory(GsonConverterFactory.create()) // 使用 Gson 解析 JSON
        .build();
ApiService apiService = retrofit.create(ApiService.class);

发送请求并解析数据

// 异步请求(推荐)
apiService.getUserInfo().enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        if (response.isSuccessful()) {
            User user = response.body();
            // 处理数据(如更新 UI)
            Log.d("UserInfo", "姓名: " + user.getName());
        } else {
            // 处理错误(如服务器返回 404)
            Log.e("Error", "响应码: " + response.code());
        }
    }
    @Override
    public void onFailure(Call<User> call, Throwable t) {
        // 处理网络错误(如无网络)
        Log.e("NetworkError", t.getMessage());
    }
});

常见 JSON 结构处理方式对比

JSON 结构 处理方式
简单对象(如 {"key":value} 直接映射到 Java 对象的字段
数组(如 [{"id":1}, {"id":2}] 定义为 List<Item>ArrayList<Item>
嵌套对象(如 {"user":{"name":"张三"}} 创建嵌套类(如 User 类包含 UserInfo user 字段)
动态字段(如 {"data":{...}} 使用 JsonObject 或自定义 Deserializer

错误处理与优化建议

问题类型 解决方案
网络错误(如超时、DNS 失败) 使用 onFailure 回调捕获异常,提示用户检查网络
JSON 格式错误 onResponse 中检查 response.body() 是否为 null
字段缺失或类型不匹配 在数据模型类中使用 transient 忽略无关字段,或自定义 Gson 解析规则
主线程阻塞 避免使用 execute(),始终使用 enqueue() 进行异步请求

相关问题与解答

问题1:如何处理嵌套 JSON 或复杂结构?

解答

  • 定义嵌套类,

    public class ResponseWrapper<T> {
        private T data;
        private String message;
        // Getter/Setter...
    }
    // 使用时:Call<ResponseWrapper<User>> call = apiService.getUserData();
  • 或使用 Map<String, Object> 接收动态结构,再手动提取字段。


问题2:如何将 JSON 数据保存到本地数据库?

解答

  1. 解析 JSON 后,将数据转换为实体类对象。

  2. 使用 Room 持久化库将数据插入数据库:

    @Entity
    public class UserEntity {
        @PrimaryKey(autoGenerate = true)
        public int id;
        public String name;
        // 其他字段...
    }
    // 插入数据
    userDao.insert(user); // 需通过 Repository 模式调用 DAO 接口
0