在Android版本9中运行时,从服务器获取JSON的代码会导致崩溃

问题描述 投票:0回答:1

如果Android版本是6或7但是崩溃的Android版本9,下面的代码运行成功

public class TestConnectionToServer extends AsyncTask<String, Void, String>{

String IPConnection ="http://************";

public String doInBackground(String... IntegerParam) {
    try {               
        URL url = new URL(IPConnection+"TestConnectionToServer");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));    
            StringBuilder stringBuilder = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }

            bufferedReader.close();         
            return stringBuilder.toString();                
        }                   
        finally {
            urlConnection.disconnect();
        }
    }       
    catch(Exception e) {        
        Log.e("ERROR", e.getMessage(), e);
        return e.getMessage();     
    }   
}
android httpurlconnection
1个回答
0
投票

Android 9与网络相关的一个变化是使用http而不是https不再容易,请参阅Protecting users with TLS by default in Android P

您很可能只需切换到https。

如果您希望/必须使用http,则必须更改应用的网络安全配置。

  • 在main / res文件夹中创建名为xml的资源目录
  • 在此目录中创建XML资源文件mynetworksecurityconfig.xml
  • 要允许与特定域的不安全明文连接,可以按如下方式声明网络安全配置:

mynetworksecurityconfig.xml

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
    </domain-config>
</network-security-config>
  • 最后,通过在Manifest.xml标记中设置android:networkSecurityConfig属性,在app的application中添加配置文件的链接

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.mynetworksecurityconfigtest">

    <application android:networkSecurityConfig="@xml/mynetworksecurityconfig"
                ... >
        ...
    </application>
</manifest>

有关更多信息,请参阅Network security configuration上的培训单元。

© www.soinside.com 2019 - 2024. All rights reserved.