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

