You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio(Java)中遍历Flask API返回的JSON数组并将药物名称保存到字符串数组

问题:Android Studio(Java)中遍历Flask返回的JSON数组,提取Drug_Name到字符串数组

你现在的核心问题是请求类型不匹配:你的Flask后端返回的是一个JSON数组(用[]包裹的多个对象),但你在Android里用了JsonObjectRequest——这个类是用来请求单个JSON对象({}包裹)的,不仅会导致解析失败,也没法正常遍历数据。

下面是修正后的完整实现步骤和代码:


步骤1:替换Volley请求类型为JsonArrayRequest

把原来的JsonObjectRequest换成JsonArrayRequest,完全适配后端返回的数组结构。

步骤2:遍历JSON数组并提取Drug_Name

在onResponse回调里,我们可以遍历JSONArray中的每个JSONObject,取出Drug_Name字段的值,存入ArrayList<String>(比固定长度数组更灵活,最后可以按需转成字符串数组)。

完整代码示例

String url = "https://********.herokuapp.com/";
RequestQueue queue = Volley.newRequestQueue(getContext());

// 替换为JsonArrayRequest,匹配后端返回的数组格式
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
        new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                // 用ArrayList存储药品名,长度可变更灵活
                ArrayList<String> drugNameList = new ArrayList<>();
                
                try {
                    // 遍历JSON数组中的每个药品对象
                    for (int i = 0; i < response.length(); i++) {
                        // 取出数组中的第i个JSON对象
                        JSONObject drugObject = response.getJSONObject(i);
                        // 提取Drug_Name字段,注意字段名大小写和后端完全一致
                        String drugName = drugObject.getString("Drug_Name");
                        // 将名字添加到列表
                        drugNameList.add(drugName);
                    }

                    // 如果需要转成固定长度的字符串数组,执行以下操作
                    String[] drugNameArray = new String[drugNameList.size()];
                    drugNameArray = drugNameList.toArray(drugNameArray);

                    // 这里可以对列表或数组做后续操作,比如显示到UI组件
                    // 示例:打印所有药品名到日志
                    for (String name : drugNameArray) {
                        Log.d("DrugName", name);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getContext(), "数据解析出错", Toast.LENGTH_LONG).show();
                }
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(getContext(), "请求失败,请重试", Toast.LENGTH_LONG).show();
        // 打印错误信息方便调试
        error.printStackTrace();
    }
});

queue.add(jsonArrayRequest);

额外注意事项

  • 字段名大小写敏感:确保getString("Drug_Name")里的字段名和Flask返回的Drug_Name完全一致,大小写不能出错。
  • 空值处理:如果后端可能返回null的Drug_Name,可以先用drugObject.has("Drug_Name")判断字段是否存在,再用optString("Drug_Name")替代getString,避免抛出异常。
  • 线程问题:Volley的回调是在主线程执行的,如果需要处理大量数据,记得把耗时操作放到子线程,避免UI卡顿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:37:39