android - 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;
}
解决方案
我认为您的问题不在于 JSONObject 本身。更可能与 Android 中 HTTP 调用方式的变化和限制有关。较新版本引入了一些更改,例如:
- 要求使用 HTTPS 发出所有请求。
- 弃用旧的 HTTP 客户端,如 Apache 的客户端。
启用配置标志可以绕过其中一些限制,这将为您提供更多时间来更新您的实现。但推荐的方法是遵循新指南,停止使用已弃用的东西。
转到此处,并检查“所有应用程序的行为更改”和“针对 API XX+ 的应用程序的行为更改”页面,以了解您的应用程序无法运行的 Android 版本。这将为您提供有关这是否是问题的线索。
推荐阅读
- python - 如何使用 Python 清理填充有名称的数据框列?
- java-8 - Java 8:基于另一个枚举从一个枚举分配值
- javascript - Node.js - 承诺不在循环内解决
- google-maps - Google KML 导入替换图标
- function - 带有下限浮点数和 lambda 函数的列表理解的错误消息
- postgresql - TypeError: rxjs_1.lastValueFrom 不是函数
- android - 如何在 Android NDK c++ 上执行 ASE-256-CBC 加密和解密?
- pentaho - 继承数据集会减慢 Pentaho 报表设计器的速度吗?
- apache - geoserver 和 apache:如何将 url 缩减为仅主机名并分别从 url 的路径中删除 /geoserver/?
- python-3.x - 如何在没有第三方或 docker 的情况下在 Windows 上构建 jupyter hub?