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

从OpenWeatherMap API提取JSON数据至Logcat时遇权限错误求助

问题分析与解决方案

先帮你理清两个核心点:那个系统警告和你的API请求问题。

关于Access denied finding property "persist.vendor.log.tel_dbg"错误

这个错误和你的天气API请求完全无关,它是Android系统层面的警告——系统在尝试读取一个运营商调试日志的系统属性,但没有足够权限,属于系统级的日志噪音,不会影响你的APP功能,直接忽略它就行,重点关注你自己的Result日志输出。

你的API请求代码需要修复的问题

我看了你的代码,有几个关键问题可能导致你拿不到正确的API数据:

1. URL中的转义字符错误

你写的API URL里用了&,这是HTML的转义字符,在Java字符串里应该直接用&来分隔参数,否则服务器无法正确解析你的请求参数。修改后的URL应该是:

String api = "http://api.openweathermap.org/data/2.5/weather?q=kolkata&appid=e8cd0e5f8d3ba1e87d108da87d9c0a94";

2. 缺少网络权限

Android应用要发起网络请求,必须在AndroidManifest.xml中声明互联网权限,否则会被系统拦截请求。添加以下代码到你的Manifest文件里(放在<application>标签外面):

<uses-permission android:name="android.permission.INTERNET" />

3. 输入流读取优化(推荐)

你当前逐个字符读取输入流的方式效率很低,建议换成BufferedReader批量读取,同时增加响应码检查和资源关闭逻辑,避免异常:

@Override
protected String doInBackground(String... urls) {
    String result = "";
    URL url;
    HttpURLConnection urlConnection = null;
    try {
        url = new URL(urls[0]);
        urlConnection = (HttpURLConnection) url.openConnection();
        
        // 先检查响应码,确保请求成功
        int responseCode = urlConnection.getResponseCode();
        if (responseCode != HttpURLConnection.HTTP_OK) {
            return "请求失败,响应码:" + responseCode;
        }

        InputStream in = urlConnection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line;
        while ((line = reader.readLine()) != null) {
            result += line;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return "URL格式错误:" + e.getMessage();
    } catch (IOException e) {
        e.printStackTrace();
        return "网络IO错误:" + e.getMessage();
    } finally {
        // 记得关闭连接,避免资源泄漏
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
    return result;
}

4. 额外提示:AsyncTask已被弃用

虽然你的代码用AsyncTask能正常运行,但Android已经废弃了这个API,如果是新项目,建议改用Coroutines或者OkHttp+Executor来处理网络请求,这是后续优化的方向。

验证修改效果

做完以上修改后,重新运行APP,去Logcat里找Result标签的输出:

  • 如果成功,你会看到OpenWeatherMap返回的JSON数据
  • 如果还是有问题,查看Logcat里的异常信息,比如是否是APPID无效、网络连接问题等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:01