有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何修复“不允许x的明文HTTP通信”

我试图向http服务器发出post请求,但是当我试图获取输入流时,我得到了错误java.io.IOException: Cleartext HTTP traffic to x not permitted

我已经尝试将安卓:usesCleartextTraffic="true"放在我的清单中,并进行了网络安全配置,将安卓:targetSandboxVersion设置为1

app/src/main/res/xml/network\u security\u config。xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Server adress</domain>
    </domain-config>
</network-security-config>

app/src/main/AndroidManifest。xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    package="com.example.packagename"
    安卓:targetSandboxVersion="1">

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

    <application
        安卓:allowBackup="true"
        安卓:icon="@mipmap/ic_launcher"
        安卓:label="@string/app_name"
        安卓:roundIcon="@mipmap/ic_launcher_round"
        安卓:supportsRtl="true"
        安卓:theme="@style/AppTheme"
        安卓:usesCleartextTraffic="true"
        安卓:networkSecurityConfig="@xml/network_security_config"
        >
        <activity 安卓:name=".MainActivity">
            <intent-filter>
                <action 安卓:name="安卓.intent.action.MAIN" />

                <category 安卓:name="安卓.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

对数输出

D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
W/System.err: java.io.IOException: Cleartext HTTP traffic to x not permitted
W/System.err:     at com.安卓.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:124) 
W/System.err:     at com.安卓.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
W/System.err:     at com.安卓.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
W/System.err:     at com.安卓.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)

任何帮助都将不胜感激


共 (6) 个答案

  1. # 1 楼答案

    试着使用just

    android:usesCleartextTraffic="true"
    

    删除此2

    android:targetSandboxVersion="1"
    android:networkSecurityConfig="@xml/network_security_config"
    

    我的应用程序可以在任何API中使用android:usesCleartextTraffic=“true”

  2. # 2 楼答案

    不要这样做,这可能是获取运行时错误 做最简单的方法; 转到android本机项目,在这里您可以看到属性单击此处,然后获取AssemblyInfo。cs文件,然后在下面编辑此部分

    [程序集:应用程序(UsesCleartextTraffic=true)]

    下面是我的代码示例:-

     using System.Reflection;
        using System.Runtime.CompilerServices;
    
        using System.Runtime.InteropServices;
    
        using Android.App;
    
        // General Information about an assembly is controlled through the following 
        // set of attributes. Change these attribute values to modify the information
        // associated with an assembly.
        [assembly: AssemblyTitle("ZATWEBO.Android")]
        [assembly: AssemblyDescription("")]
        [assembly: AssemblyConfiguration("")]
        [assembly: AssemblyCompany("")]
        [assembly: AssemblyProduct("ZATWEBO.Android")]
        [assembly: AssemblyCopyright("Copyright ©  2014")]
        [assembly: AssemblyTrademark("")]
        [assembly: AssemblyCulture("")]
        [assembly: ComVisible(false)]
    
        // Version information for an assembly consists of the following four values:
        //
        //      Major Version
        //      Minor Version 
        //      Build Number
        //      Revision
        //
        // You can specify all the values or you can default the Build and Revision Numbers 
        // by using the '*' as shown below:
        // [assembly: AssemblyVersion("1.0.*")]
        [assembly: AssemblyVersion("1.0.0.0")]
        [assembly: AssemblyFileVersion("1.0.0.0")]
    
        // Add some common permissions, these can be removed if not needed
        [assembly: UsesPermission(Android.Manifest.Permission.Internet)]
        [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
        [assembly: Application(UsesCleartextTraffic = true)]
    

    注意:此更改只需要android 9 Pie或更高版本

  3. # 3 楼答案

    我向Android清单文件添加了以下代码:

        <?xml version="1.0" encoding="utf-8"?>
        <network-security-config>
            <base-config>
                <trust-anchors>
                    <certificates src="system">
                    </certificates>
                </trust-anchors>
            </base-config>
            <domain-config cleartextTrafficPermitted="true">
                <domain includeSubdomains="true">http://YourURL/api/</domain>
            </domain-config>
        </network-security-config>
    
  4. # 4 楼答案

    在项目res/xml/security\u config中创建一个文件。xml-

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
        </domain-config>
    </network-security-config>
    
    AndroidManifest.xml -
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        <uses-permission android:name="android.permission.INTERNET" />
        <application
            ...
            android:networkSecurityConfig="@xml/security_config"
            ...>
            ...
        </application>
    </manifest>
    

    另外,如果您在中有android:targetSandboxVersion,则将其减少为1

  5. # 5 楼答案

    可能是你弄错了。这是从另一个来源获得的正确格式

     <?xml version="1.0" encoding="utf-8"?>
     <network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
    

    AndroidManifest。xml-

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
     <uses-permission android:name="android.permission.INTERNET" />
     <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
     </application>
    </manifest>
    

    如果在中有android:targetSandboxVersion,则将其减少为1

    AndroidManifest。xml-

       <?xml version="1.0" encoding="utf-8"?>
    <manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
    

  6. # 6 楼答案

    我也遇到了同样的问题,我通过将安卓版本降低到25英寸解决了这个问题,并且,该应用程序在安卓9及更小的设备上运行良好

    <uses-sdk
            android:minSdkVersion="16"
            android:targetSdkVersion="25" />