You need to enable JavaScript to run this app. Android Java中如何将硬编码ItemModel列表改为从JSON接口获取或循环添加?
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中如何将硬编码ItemModel列表改为从JSON接口获取或循环添加?

实现方案

方案1:本地循环批量添加(适用于测试数据场景)

你可以先把所有待添加的数据统一存到一个数据源集合中,再通过循环遍历批量调用add方法,避免重复硬编码:

// 先把所有ItemModel需要的参数按顺序存入二维数组
String[][] testData = {
    {"10.30", "120/10", "80", "Tue,31 Oct 17"},
    {"10.30", "142/95", "95", "Tue,31 Oct 17"},
    {"15.30", "120/95", "200", "Tue,31 Oct 17"},
    {"20.30", "120/10", "80", "Tue,29 Oct 17"},
    {"10.30", "120/10", "50", "Tue,29 Oct 17"},
    {"10.30", "140/10", "80", "Tue,28 Oct 17"},
    {"10.30", "30/75", "40", "Tue,28 Oct 17"},
    {"10.30", "150/80", "70", "Tue,28 Oct 17"}
};

ArrayList<ItemModel> items = new ArrayList<>();
// 循环遍历批量添加
for (String[] item : testData) {
    items.add(new ItemModel(item[0], item[1], item[2], item[3]));
}
return items;

方案2:从JSON数据源拉取解析生成列表(适用于正式业务场景)

前置准备

  1. 先在模块级build.gradle中添加网络请求和JSON解析依赖:
dependencies {
    // 网络请求库
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
    // JSON解析库
    implementation 'com.google.code.gson:gson:2.10.1'
}
  1. 在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

核心实现逻辑

安卓禁止在主线程执行网络请求,你可以用协程、AsyncTask或者OkHttp的异步回调来实现,下面是异步请求示例:

public void loadItemData(OnDataLoadedListener listener) {
    ArrayList<ItemModel> items = new ArrayList<>();
    String jsonUrl = "你的JSON数据源地址";
    
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url(jsonUrl)
            .build();
    
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NotNull Call call, @NotNull IOException e) {
            // 处理请求失败逻辑
            listener.onFailed(e.getMessage());
        }

        @Override
        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
            if (response.isSuccessful() && response.body() != null) {
                String jsonStr = response.body().string();
                // 解析JSON数组,这里需要根据你实际的JSON结构调整解析逻辑
                // 示例假设JSON返回的是数组,每个元素的字段对应ItemModel的四个入参
                JsonArray jsonArray = JsonParser.parseString(jsonStr).getAsJsonArray();
                for (JsonElement element : jsonArray) {
                    JsonObject obj = element.getAsJsonObject();
                    // 替换下面的字段名为你实际JSON返回的字段名
                    String time = obj.get("time").getAsString();
                    String rate = obj.get("rate").getAsString();
                    String value = obj.get("value").getAsString();
                    String date = obj.get("date").getAsString();
                    items.add(new ItemModel(time, rate, value, date));
                }
                // 切回主线程回调结果
                new Handler(Looper.getMainLooper()).post(() -> listener.onSuccess(items));
            }
        }
    });
}

// 自定义回调接口
public interface OnDataLoadedListener {
    void onSuccess(ArrayList<ItemModel> items);
    void onFailed(String errorMsg);
}

你在需要加载数据的地方调用loadItemData方法,在onSuccess回调中拿到最终的列表即可使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:30:04