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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:49