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

