Android开发 HttpURLConnection请求互联网资源失败问题
问题描述
Android高版本联网失败报错:Cleartext HTTP traffic to xxxx not permitted以及不能够在主线程请求网络资源的问题。
try{
qwe++;
String str = "http://49.235.134.191:8080/news/get";
URL url = new URL(str);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
if(connection.getInputStream() != null)
qwe+=10;
else qwe += 20;
InputStream is = connection.getInputStream();
qwe++;
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String s = null;
while ((s = br.readLine()) != null){
sb.append(s);qwe++;
}
Log.i("qw", "getUrlData: sb1--"+sb.toString() );
br.close();
}catch (Exception e){System.out.println("异常为:");
e.printStackTrace();
}finally {
if (connection != null){
connection.disconnect();
}
}
原因分析:
1.Google针对新一代 Android 系统将要求默认使用加密连接,因此http请求未加密互联网资源失败,https则可以成功。
2.不能在主线程请求网络资源
解决方案:
针对不能请求未加密连接,在AndroidManifest.xml配置文件的标签中直接插入(感谢junbs分享)
android:usesCleartextTraffic="true"
针对不能在主线程请求网络资源,在Oncreate下插入如下代码(参考https://blog.csdn.net/kaiqiangzhang001/article/details/8350938)
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)