Android Http网络请求异常求助:数据无法显示到TextView
问题分析与解决方案
看起来你的核心问题是:点击按钮后,AsyncTask明明去请求了指定URL的JSON数据,但TextView始终停留在初始设置的"sunucu cevabı",没有更新为获取到的内容。咱们一步步来排查和解决:
1. 先确认Internet权限的正确配置
虽然你说已经配置了权限,但一定要确保权限声明写在AndroidManifest.xml的<application>标签外部——位置不对的话权限是完全不生效的:
<uses-permission android:name="android.permission.INTERNET"/> <!-- 可选:添加这个权限可以提前检查网络状态,避免无网时白忙活 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2. 修复AsyncTask中的资源泄漏与错误处理
你的代码里有几个小问题:没有正确关闭网络连接、输入流等资源,字符串拼接效率低,且异常信息不够详细。修改后的arkaPlan类如下:
class arkaPlan extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { HttpURLConnection connection = null; BufferedReader br = null; InputStream is = null; try { URL url = new URL(params[0]); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // 明确指定请求方法 connection.setConnectTimeout(5000); // 添加连接超时,避免无限等待 connection.setReadTimeout(5000); // 添加读取超时 // 先检查响应码,只有成功(200)才处理数据 int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { is = connection.getInputStream(); br = new BufferedReader(new InputStreamReader(is)); StringBuilder dosya = new StringBuilder(); // 用StringBuilder代替+=,效率更高 String satir; while ((satir = br.readLine()) != null) { Log.d("satir ", satir); dosya.append(satir); } return dosya.toString(); } else { return "Hata: Sunucu yanıt kodu " + responseCode; } } catch (Exception e) { // 打印详细异常日志,方便排查 Log.e("arkaPlan Hatası", "İstek sırasında sorun oluştu: " + e.getMessage()); return "Hata: " + e.getMessage(); } finally { // 必须关闭所有资源,避免内存泄漏 try { if (br != null) br.close(); if (is != null) is.close(); if (connection != null) connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } @Override protected void onPostExecute(String s) { // 打印返回数据,确认是否拿到了JSON Log.d("postExecute", "Gelen veri: " + s); // 这里更新TextView text.setText(s); } }
3. 排查其他潜在问题
- 检查布局文件中
TextView的ID是否确实是textView,确保findViewById(R.id.textView)没有找错控件; - 查看Logcat日志:
- 如果
postExecute日志显示了完整的JSON数据,说明网络请求成功,那可能是TextView的显示问题(比如文字颜色和背景色一致,导致看不见); - 如果
postExecute显示的是错误信息,根据日志里的提示排查(比如网络不可用、URL拼写错误等)。
- 如果
额外小建议
现在Android已经不再推荐使用AsyncTask了,如果你的项目是基于较新的Android版本开发,后续可以考虑改用Coroutines或者OkHttp+ViewModel的组合,代码会更简洁且更易维护。
内容的提问来源于stack exchange,提问作者Burak İNAL
相关产品推荐
相关产品推荐

