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

Android onPostExecute无法获取PHP端json_encode返回结果的问题

解决Android与PHP后端交互无响应的问题

看起来你遇到的问题很典型,我帮你梳理几个关键的排查和修复点,按优先级来:

首先修复Android端的明显错误

  1. 响应读取不完整
    你的doInBackground里读取服务器响应时,只读了第一行就break了!这会导致如果服务器返回的内容有多行(比如PHP输出了警告信息+JSON),你只能拿到部分内容,甚至不是完整的JSON结构,后续解析自然出问题。把break删掉:

    while((line = reader.readLine()) != null) {
        sb.append(line);
        // 移除这行 break;
    }
    
  2. Toast没有显示
    你写了Toast但没调用show()方法!就算逻辑执行成功,你也看不到提示,误以为没响应:

    // 修正前(不会显示)
    Toast.makeText(emp_home.this,"Invalid Succesful..",Toast.LENGTH_SHORT);
    // 修正后
    Toast.makeText(emp_home.this,"Login Successful..",Toast.LENGTH_SHORT).show();
    

    顺便把提示文字改对,"Invalid Succesful.."明显是笔误,别误导自己。

  3. 先打印原始响应内容
    在onPostExecute里先把拿到的result打印出来,不管是用Log还是Toast,先确认你到底拿到了什么:

    @Override
    protected void onPostExecute(String result){
        // 先看原始数据,这是排查问题的关键
        Log.d("SigninDebug", "Raw response: " + result);
        Toast.makeText(emp_home.this, "Received: " + result, Toast.LENGTH_LONG).show();
        
        try{
            JSONObject jObj = new JSONObject(result);
            if(jObj.getBoolean("status")) {
                Toast.makeText(emp_home.this,"Login Successful..",Toast.LENGTH_SHORT).show();
            } else{
                Toast.makeText(emp_home.this,"Invalid Login ! Try Again",Toast.LENGTH_SHORT).show();
            }
        }catch (JSONException ex) {
            ex.printStackTrace();
            // 给用户提示解析出错
            Toast.makeText(emp_home.this, "Parse error: " + ex.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    

    这样你就能知道是没拿到数据,还是数据格式不对。

然后检查PHP端的潜在问题

  1. 添加SQL错误捕获
    你现在完全没检查MySQL语句是否执行成功,如果插入失败(比如表结构不匹配、字段约束错误),PHP可能会输出警告信息,这些警告会和JSON混在一起,导致Android拿到的不是纯JSON。加上错误处理:

    $result3 = mysqli_query($con,$sql3);
    // 检查SQL执行状态
    if(!$result3){
        $resu["status"] = false;
        $resu["error_msg"] = mysqli_error($con); // 把错误返回给Android,方便排查
    }
    // 指定响应类型为JSON,避免解析问题
    header('Content-Type: application/json');
    echo json_encode($resu);
    

    另外,你的clean函数里的get_magic_quotes_gpc()已经废弃了(PHP5.4之后就移除了),可以删掉这部分逻辑,直接用trim($str)就行,别用@屏蔽错误。

  2. 去掉不必要的Session
    如果你的接口不需要Session,就把session_start()删掉,避免不必要的输出(比如Session的Cookie头或者警告信息干扰JSON输出)。

最后确认基础配置

  • 检查AsyncTask是否正确执行:你在emp_home的onCreate里有没有调用new SigninActivity().execute()?没执行的话肯定不会有响应。
  • 确认网络权限:AndroidManifest.xml里必须有<uses-permission android:name="android.permission.INTERNET" />,如果是Android 9+用HTTP的话还要加android:usesCleartextTraffic="true"(你用的是HTTPS,这条可以忽略,但还是确认下)。
  • 测试PHP接口:用Postman或者curl模拟POST请求,传入username参数,看看返回的是不是纯JSON(比如{"status":true})。如果PHP返回的不是纯JSON,那Android肯定解析失败。

按这个步骤排查,应该能快速定位问题!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:47