将sdk版本更新为26后,获取非https URL失败。这仅在生产版本中发生。在开发模式下,一切正常。这是一段代码:
fetch('http://something.com/').then(
r => {},
e => console.error(e));
这会在logcat中产生以下内容:
08-12 19:08:47.555 14586 14623 E ReactNativeJS: [TypeError: Network request failed]
这是我的android/app/build.gradle
文件:
android {
compileSdkVersion 23
buildToolsVersion "27.0.3"
defaultConfig {
...
minSdkVersion 16
targetSdkVersion 26
versionCode 28
versionName "0.1.0"
}
...
}
答案 0 :(得分:1)
尝试使用其他http客户端,例如axios
答案 1 :(得分:0)
您可能需要向INTERNET
添加AndroidManifest.xml
权限。
赞:
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
另一个原因可能是您的请求的标头中包含charset: utf-8
。如果您对非拉丁服务器执行ping操作,则可能会出现问题。在这种情况下,您的服务器管理员需要更新他的nginx
(或他用于网络服务的任何设置)设置以允许该标头。
最后但并非最不重要的问题可能是a virtual router。
答案 2 :(得分:-1)
问题是,iOS在模拟器中运行,而Android在模拟器中运行。 本地主机指向运行代码的环境。仿真器仅在模拟设备时模拟真实设备。 因此,Android上的localhost指向仿真的Android设备。而不是运行服务器的计算机。 解决方案是用计算机的IP地址替换localhost。