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

Android传递EditText至PHP后返回JSON时应用崩溃求助

搞定你的Android-JSON崩溃问题!

嘿,你的应用崩溃根源其实很清晰,我帮你拆解一下:

首先,Android端期待服务器返回标准JSON格式的数据,但你的PHP代码输出的是普通文本(还带了<br/>标签),这就导致解析的时候直接炸了——毕竟你用JSONObject去解析一段普通字符串,肯定会抛出Value sentence of type java.lang.String cannot be converted to JSONObject这个错误。

另外还有个小坑:你Android代码里直接把EditText对象传给了参数,而不是它的文本内容!这会导致PHP收到的是类似android.widget.EditText@xxxxxx的对象toString值,根本不是用户输入的内容,后续处理自然也不对。


一步步修复

1. 先把Android的参数传递改对

你得先拿到EditText里用户输入的文本,再传参:

// 先获取EditText的输入内容,记得trim掉前后空格哦
String userInput = editText.getText().toString().trim();
params.add(new BasicNameValuePair("my_string", userInput));
JSONObject json = jsonParser.makeHttpRequest(url_translate, "GET", params);

2. 让PHP返回合法的JSON

PHP不能随便echo文本,得输出标准JSON,还要告诉客户端“我返回的是JSON”:

<?php
// 必须设置这个响应头,让Android知道这是JSON数据
header('Content-Type: application/json');

if (isset($_GET['my_string'])) {
    $str = $_GET['my_string'];
    $explodestr = explode(" ", $str);
    
    // 把处理后的结果打包成数组,转成JSON输出
    $result = array(
        "original" => $str,
        "split_result" => $explodestr
    );
    
    echo json_encode($result);
} else {
    // 如果没收到参数,也返回JSON格式的错误信息
    echo json_encode(array("error" => "没收到my_string参数哦"));
}
?>

3. Android端正确解析JSON

现在PHP返回的是标准JSON对象了,你可以这样安全解析:

try {
    // 先检查有没有错误
    if (json.has("error")) {
        String errorMsg = json.getString("error");
        // 这里可以弹个Toast告诉用户出错了
        Toast.makeText(context, errorMsg, Toast.LENGTH_SHORT).show();
        return;
    }
    
    // 获取原始输入字符串
    String originalText = json.getString("original");
    // 获取分割后的数组
    JSONArray splitArray = json.getJSONArray("split_result");
    
    // 遍历数组处理每个元素
    for (int i = 0; i < splitArray.length(); i++) {
        String word = splitArray.getString(i);
        // 这里做你需要的操作,比如显示到界面上
    }
} catch (JSONException e) {
    e.printStackTrace();
    Toast.makeText(context, "数据解析失败", Toast.LENGTH_SHORT).show();
}

额外提醒

  • 如果你的字符串包含中文,PHP的json_encode默认会把中文转成Unicode编码,看起来像\uXXXX,可以改成json_encode($result, JSON_UNESCAPED_UNICODE)来保留中文原样(需要PHP 5.4及以上版本)。
  • 网络请求一定要在子线程里执行!如果你的jsonParser.makeHttpRequest是在主线程调用的,会触发NetworkOnMainThreadException,这也是常见的崩溃原因,记得用AsyncTask、Coroutine或者OkHttp的异步回调来处理网络请求哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:12