如何在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
相关产品推荐
相关产品推荐

