首页 > 解决方案 > JSONObject 在 Android 10 中返回 null?

问题描述

我在运行 Android 8 的手机和运行 Android 8.1 的平板电脑上安装了一个用于工作的私有应用程序,并且两者都运行良好,但是当我将它安装在运行 Android 10 的新手机上时,它给了我一个 JSON 错误。该应用程序的其余部分工作正常,但它显示 JSONObject 为空。这只是一个设置还是 Android 10 发生了一些变化?

@Override
        protected Void doInBackground(Void... arg0) {

            HttpJsonParser httpJsonParser = new HttpJsonParser();
            Map<String, String> httpParams = new HashMap<>();
            
            JSONObject jsonObject = httpJsonParser.makeHttpRequest(GET_VERSION_URL, "GET", httpParams);

            if (jsonObject != null) { // <- Returns fine on Android 8.1 but not Android 10

                try {
                    ...
                } catch (final JSONException e) {
                    ...
                }

            } else {
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this,"Error.", Toast.LENGTH_LONG).show(); // <-Goes to this everytime
                    }
                });
            }

            return null;

        }

标签: androidjson

解决方案


我认为您的问题不在于 JSONObject 本身。更可能与 Android 中 HTTP 调用方式的变化和限制有关。较新版本引入了一些更改,例如:

  • 要求使用 HTTPS 发出所有请求。
  • 弃用旧的 HTTP 客户端,如 Apache 的客户端。

启用配置标志可以绕过其中一些限制,这将为您提供更多时间来更新您的实现。但推荐的方法是遵循新指南,停止使用已弃用的东西。

转到此处,并检查“所有应用程序的行为更改”和“针对 API XX+ 的应用程序的行为更改”页面,以了解您的应用程序无法运行的 Android 版本。这将为您提供有关这是否是问题的线索。


推荐阅读