Код для получения JSON с сервера вызывает сбой при запуске в Android версии 9 - PullRequest
0 голосов
/ 17 февраля 2019

Следующий фрагмент кода выполняется успешно, если версия для Android 6 или 7, но вылетает для версии 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

1 Ответ

0 голосов
/ 17 февраля 2019

Одним из изменений, связанных с сетью в Android 9, является то, что теперь он не прост в использовании http вместо https , см. Защита пользователей с помощью TLS по умолчанию в Android P .

Скорее всего, вы можете просто переключиться на https .

Если вы хотите / должны остаться с http , вам нужно изменить конфигурацию сетевой безопасности вашего приложения.

  • Создать каталог ресурсов с именем xml в папке main / res
  • Создать файл ресурсов 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 в теге application

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

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

См. Раздел обучения Настройка безопасности сети для получения дополнительной информации.

...