我最近将手机更新为Android 9.0。我正在开发的应用程序在早期的Android版本中运行良好。但在更新后,一些需要互联网的观点没有加载。在他们的地方显示空白。
它有一个ViewPager
作为横幅和2 RecyclerView
分类和交易。他们都需要互联网来加载数据。
我不知道Android Pie中是否需要任何额外的权限或依赖项。
日志显示
NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
试试这些解决方案
解决方案1)
在manifest
文件中的应用程序标记中添加此行
android:usesCleartextTraffic="true"
如下
<application
android:name=".ApplicationClass"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
在manifest
文件中的应用程序标记中添加此标记
解决方案2)
在应用程序标签中添加android:networkSecurityConfig="@xml/network_security_config"
<application
android:name=".ApplicationClass"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
哪里有network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在res目录下创建xml,然后在etwork_security_config.xml
文件夹中创建nxml
有关更多信息
https://developer.android.com/about/versions/pie/android-9.0-changes-28
Download Manger not working in Android Pie 9.0 (Xiaomi mi A2)
我想的唯一可能的错误是。在Android 9之后,你需要指定networksecurityconfig
来连接服务器url。因此,您需要在代码中进行以下更改。
像你这样在android:networkSecurityConfig="@xml/network_security_config"
的应用程序标签中添加AndroidManifest.xml
<application
android:name=".ApplicationClass"
android:allowBackup="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
哪里有network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
你需要在xml
目录下创建res
目录,然后在xml文件夹中创建network_security_config.xml
为了增强用户隐私,Android 9引入了一些行为更改,例如限制后台应用访问设备传感器,限制从Wi-Fi扫描中检索到的信息,以及与电话,电话状态和Wi-相关的新权限规则和权限组Fi扫描。
无论目标SDK版本如何,这些更改都会影响在Android 9上运行的所有应用。
android:usesCleartextTraffic
指示应用程序是否打算使用明文网络流量,例如明文HTTP。默认值是true”。当属性设置为“false”时,平台组件(例如,HTTP和FTP堆栈,DownloadManager,MediaPlayer)将拒绝应用程序使用明文流量的请求。强烈建议第三方图书馆遵守此设置。避免明文流量的关键原因是缺乏机密性,真实性和防止篡改:网络攻击者可以窃听传输的数据并在不被检测的情况下对其进行修改。
此标志在尽力而为的基础上得到尊重,因为考虑到提供给他们的访问级别,不可能阻止来自Android应用程序的所有明文流量。例如,没有预期Socket API将遵循此标志,因为它无法确定其流量是否为明文。但是,来自应用程序的大多数网络流量由更高级别的网络堆栈/组件处理,这些堆栈/组件可以通过从ApplicationInfo.flags或NetworkSecurityPolicy.isCleartextTrafficPermitted()读取此标志来获得此标志。