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

Android Studio中如何获取PHP返回的所有JSON值并显示到TextView

解决Android Studio中仅能获取PHP返回的第一个运动限制选项的问题

看起来你遇到的核心问题是PHP返回的JSON格式不规范,导致Android端解析时只能读取到第一个对象。下面分两种场景给出解决方法:

一、推荐方案:修改PHP端输出格式(最规范)

你现在的PHP输出是多个独立的{"limitacao_motora": [...]}对象拼接在一起,这不是合法的JSON结构。正确的做法是把所有运动限制项放到一个数组里,统一返回一个JSON对象:

// 收集所有限制项到数组
$limitacoes = [
    ["descricaoLimitacao" => "Wheelchair"],
    ["descricaoLimitacao" => "Crutches"],
    ["descricaoLimitacao" => "Walk short distances"],
    ["descricaoLimitacao" => "Only short stairs"],
    ["descricaoLimitacao" => "Only short stairs"]
];

// 输出合法的JSON对象
echo json_encode(["limitacao_motora" => $limitacoes]);

这样返回的JSON结构是:

{"limitacao_motora": [
    {"descricaoLimitacao":"Wheelchair"},
    {"descricaoLimitacao":"Crutches"},
    {"descricaoLimitacao":"Walk short distances"},
    {"descricaoLimitacao":"Only short stairs"},
    {"descricaoLimitacao":"Only short stairs"}
]}

二、如果无法修改PHP,在Android端处理原始字符串

如果没法调整PHP代码,你需要先把拼接的多个JSON对象转换成合法的JSON数组,再进行解析:

步骤1:处理原始响应字符串

假设你从PHP拿到的原始字符串是response,先把它转换成合法的JSON数组:

// 替换对象之间的空格分隔为逗号,再包裹成数组
val processedResponse = "[" + response.replace("} {", "},{") + "]"

步骤2:解析JSON并显示到TextView

这里用Gson库为例(如果没依赖,先在build.gradle添加Gson依赖):

首先定义数据类:

data class LimitationResponse(val limitacao_motora: List<LimitationItem>)
data class LimitationItem(val descricaoLimitacao: String)

然后解析并显示:

val gson = Gson()

// 场景1:如果是修改PHP后的单个JSON对象
val singleResponse = gson.fromJson(processedResponse, LimitationResponse::class.java)
val allLimitations = singleResponse.limitacao_motora

// 场景2:如果是处理后的多个JSON对象数组
// val responses = gson.fromJson(processedResponse, Array<LimitationResponse>::class.java)
// val allLimitations = responses.flatMap { it.limitacao_motora }

// 方式1:把所有选项拼接成字符串显示在一个TextView
yourTextView.text = allLimitations.joinToString("\n") { it.descricaoLimitacao }

// 方式2:分别显示到多个TextView(假设有5个TextView)
val textViews = arrayOf(textView1, textView2, textView3, textView4, textView5)
allLimitations.forEachIndexed { index, item ->
    if (index < textViews.size) {
        textViews[index].text = item.descricaoLimitacao
    }
}

为什么原来只能拿到第一个值?

因为你拿到的是多个独立的JSON对象直接拼接,不是合法的JSON数组或对象。JSON解析器读取到第一个}时就认为当前对象解析完成,所以只会返回第一个limitacao_motora的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:59