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

