Приложение вылетает при запросе к сети [дубликат]

309
01 августа 2017, 16:06

На данный вопрос уже ответили:

  • Как починить android.os.NetworkOnMainThreadException 1 ответ

Приложение содержит 1 Activity, в методе onCreate содержится следующий код:

    int c;
    URL myUrl = null;
    try {
        myUrl = new URL("http://www.pro-java.ru");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URLConnection myUrlCon = null;
    try {
        myUrlCon = myUrl.openConnection();
    } catch (IOException e) {
        e.printStackTrace();
    }
    long length = myUrlCon.getContentLength();
    String data = "";
    if(length != 0) {
        InputStream input = null;
        try {
            input = myUrlCon.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            while(((c = input.read()) != -1)) {
                data = data.concat(String.valueOf(c));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Манифест:

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.tcptest">
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
      <uses-permission android:name="android.permission.INTERNET"/>
      <application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:supportsRtl="true"
          android:theme="@style/AppTheme">
          <activity android:name=".MainActivity">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      </application>
  </manifest>

Чем может быть вызвано вылетание?

Answer 1

Чем может быть вызвано вылетание?

Оно вызвано тем, что сетевые операции нельзя производить в UI-потоке. При работе с сетью в UI-потоке будет сгенерировано NetworkOnMainThreadException.

В самом простейшем учебном случае можно воспользоваться AsyncTask, но лучше использовать другие средства для работы с интернетом, которые из коробки поддерживают работу в отличных от UI потоках, например OkHttp. Также можно воспользоваться чем-нибудь вроде Rx, или, например, Robospice или Chronos.

READ ALSO
Проблема с кодировкой Java

Проблема с кодировкой Java

Столкнулся с проблемой чтения из файла: при выводе в консоль содержимого файла вместо кириллицы показывает такие символы

306
Как итерировать hash # в href для паджинации

Как итерировать hash # в href для паджинации

Дано: Полученный объект который хранит лист других объектов в jsp

284
Некорректная работа кнопок приложения

Некорректная работа кнопок приложения

Приложение что-то наподобие словаряЕсть менюшка из 4 кнопок: добавить, загрузить, удалить и выйти

448
Как выйти из приложения?

Как выйти из приложения?

В моем приложении одна главная активность, и я добавляю в стек фрагменты при переходе (в последующих фрагментах схема такая же):

327