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

Android Studio中HttpURL响应码为空,无法获取远程MySQL数据求助

解决HttpURLConnection获取数据为空的问题

我看了你的问题描述和代码,咱们一步步来排查并解决这个获取数据为空的问题:

1. 先核对URL是否正确

你提到要请求的是 www.kudossoft.in/get_data030518.php,但代码里写的是 http://kudossoft.in/get_data300518.php —— 这里多了一个0!URL拼写错误是最常见的问题,先确认这个地址是否和你实际的PHP文件路径完全一致。

2. 改进异常捕获,别直接返回null

你当前的doInBackground方法在捕获异常时直接返回null,这导致你完全不知道到底出了什么错(是连接超时?服务器错误?还是流读取失败?)。修改这段代码,把错误信息返回,这样你能通过Toast看到具体问题:

@Override
protected String doInBackground(Void... voids) {
    try {
        URL url = new URL(urlWebService);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        // 添加请求配置
        con.setRequestMethod("GET");
        con.setConnectTimeout(5000); // 5秒连接超时
        con.setReadTimeout(5000);    // 5秒读取超时
        
        // 先检查响应码
        int responseCode = con.getResponseCode();
        if (responseCode != HttpURLConnection.HTTP_OK) {
            // 如果响应不是200,读取错误流获取服务器提示
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(con.getErrorStream()));
            StringBuilder errorSb = new StringBuilder();
            String line;
            while ((line = errorReader.readLine()) != null) {
                errorSb.append(line);
            }
            errorReader.close();
            return "服务器错误: " + responseCode + " - " + errorSb.toString();
        }

        StringBuilder sb = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String json;
        while ((json = bufferedReader.readLine()) != null) {
            sb.append(json); // 不需要加"\n",JSON里换行不影响解析
        }
        bufferedReader.close();
        con.disconnect();
        return sb.toString().trim();
    } catch (Exception e) {
        // 返回异常信息,方便排查
        return "请求异常: " + e.getMessage();
    }
}

3. 处理Android 9+的明文HTTP限制

如果你的App targetSdkVersion >= 28,Android默认会禁止明文HTTP请求(只能用HTTPS)。而你的URL是HTTP协议,这会导致连接失败。解决办法有两种:

  • 临时方案:在AndroidManifest.xml的application标签里添加android:usesCleartextTraffic="true"
  • 规范方案:创建res/xml/network_security_config.xml文件,内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">kudossoft.in</domain>
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的application标签里引用:android:networkSecurityConfig="@xml/network_security_config"

4. 验证PHP接口的输出

虽然你说插入功能正常,但还是要确认get_data300518.php的输出是否是标准的JSON格式。你可以直接在浏览器里访问这个URL,看返回的内容是否是合法的JSON(比如没有HTML错误提示,没有多余的空格或换行)。

额外提示:AsyncTask已废弃

Android的AsyncTask在API 30之后已经被废弃了,长期来看建议改用Coroutines(协程)、Volley或者Retrofit来进行网络请求,这些库更稳定也更易维护。

按照上面的步骤排查,应该能找到问题所在并解决。

内容的提问来源于stack exchange,提问作者santosh kumar sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:41:17