首页 > 解决方案 > 不允许到 www.sia.co.id 的明文 HTTP 流量。不能在 android 版本 pie 中工作,但可以在 oreo 和所有 pie 下工作。为什么?

问题描述

private String SendAndReceived() {

        HttpURLConnection con = Connector.connect(urlAddress);
        if (con == null) {

            return null;
        }

        try {

            OutputStream os = con.getOutputStream();

            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
            bw.write(new DataPackager(query).packData());

            bw.flush();

            bw.close();
            os.close();

            int responseCode = con.getResponseCode();
            StringBuffer response = new StringBuffer();

            if (responseCode == con.HTTP_OK) {

                InputStream is = con.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));

                String line;

                if (br != null) {

                    while ((line = br.readLine()) != null) {

                        response.append(line + "\n");
                    }

                } else {
                    return null;
                }

                br.close();
                is.close();

                return response.toString();


            } else {
                return String.valueOf(responseCode);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

}

调试:

W/System.err: java.io.IOException: Cleartext HTTP traffic to www.yesia.com not permitted
W/System.err:     at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
W/System.err:     at com.yesia.searchrecyclerview.MySQL.SenderReceiver.SendAndReceived(SenderReceiver.java:93)
W/System.err:     at com.yesia.searchrecyclerview.MySQL.SenderReceiver.doInBackground(SenderReceiver.java:51)
W/System.err:     at com.yesia.searchrecyclerview.MySQL.SenderReceiver.doInBackground(SenderReceiver.java:19)

标签: javaandroid-studioandroid-9.0-pie

解决方案


您必须在 AndroidManifes.xml 文件的应用程序标记上添加android:usesCleartextTraffic="true"的属性。

并添加这个。

<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />

查看这个官方博客了解为什么会发生这种情况,我们必须在清单文件中添加。


推荐阅读