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

如何从PHP获取JSON数组到Java代码并解决Spinner显示异常问题

解决从PHP获取JSON字符串数组并填充Spinner的问题

咱们先拆解下你遇到的两个问题,再给你正确的实现方案:

第一种方法的问题根源

你最初用split(",")分割JSON字符串的方式非常不严谨:

  • 首先,JSON数组里的每个元素本身带双引号(比如"item1"),分割后每个元素会保留这个引号,所以Spinner里显示带引号的内容;
  • 其次,如果你的字符串里包含逗号(比如"item,with,comma"),这种分割方式会直接把一个元素拆成多个,彻底破坏数据结构。

第二种方法的错误原因

你的第二个尝试方向是对的(用JSON解析器处理),但犯了一个关键错误:你的JSON数组里是字符串类型,不是JSONObject。你调用array.getJSONObject(i)会直接抛出JSONException,导致循环根本没执行,arr始终是空的,所以Spinner显示为空。

正确的实现代码

直接用JSONArray的getString(i)方法获取每个字符串元素即可,代码如下:

@Override 
public void onResponse(Call<String> call, Response<String> response) { 
    if (response.body() != null) { 
        ArrayList<String> itemList = new ArrayList<>(); 
        try { 
            // 把响应字符串解析成JSON数组
            JSONArray jsonArray = new JSONArray(response.body()); 
            // 遍历数组,直接获取每个字符串元素
            for (int i = 0; i < jsonArray.length(); i++) { 
                // getString会自动去掉JSON里的双引号,返回纯文本内容
                String item = jsonArray.getString(i); 
                itemList.add(item); 
            } 
            // 排序
            Collections.sort(itemList); 
            // 创建适配器并设置给Spinner
            ArrayAdapter<String> adapter = new ArrayAdapter<>(
                view.getContext(), 
                android.R.layout.simple_spinner_item, 
                itemList
            ); 
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
            if (qrtr_reg != null) { 
                qrtr_reg.setAdapter(adapter); 
            } 
        } catch (JSONException e) { 
            // 这里可以加个用户可见的错误提示,比如Toast
            Toast.makeText(view.getContext(), "数据加载失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace(); 
        } 
    } 
}

额外注意事项

  • 确保PHP返回的JSON格式是严格有效的:比如字符串用双引号,数组格式正确,没有多余的逗号;
  • 建议在catch块里添加用户可见的错误提示,方便调试和提升用户体验;
  • 如果你的JSON数据量较大,建议用更高效的JSON解析库(比如Gson),但对于简单的字符串数组,原生JSONArray足够用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:17:38