Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

android.os.NetworkOnMainThreadException при использовании потока

#java #android #сеть


Есть обработчик нажатия кнопки. При нажатии должен выполнится сетевой запрос. 
Написал по уроку простой метод для отправки http-запросов. Получил эту ошибку
android.os.NetworkOnMainThreadException Почитал, что это связано с тем, что запрос
выполняется в UI потоке. Ладно. Создал отдельный поток. 

public void reportSend(View v)
{
         th =   new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.i("TAG","MSG");

                    HttpURLConnection connection = null;
                    StringBuilder sb = new StringBuilder();
                    try {

                        connection = (HttpURLConnection) new URL ("http://spaces.ru").openConnection();

                        connection.connect();


                        if(connection.HTTP_OK == connection.getResponseCode())
                        {
                            BufferedReader input = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "cp1251"));


                            String line;
                            while ((line = input.readLine()) != null)
                            {
                                sb.append(line);
                                sb.append("\n");
                            }

                        }

                    }
                    catch (Exception cause) {
                        cause.printStackTrace();
                        //  Toast.makeText(MainActivity.this, cause.getMessage().toString(),
Toast.LENGTH_LONG).show();
                    }
                    finally {
                        if(connection != null)
                            connection.disconnect();
                    }


                    Log.i("NET",  sb.toString());
                }
            });

            th.run();
}


Ошибка тем не менее сохранилась прежняя. 
Как выйти из положения?
    


Ответы

Ответ 1



Метод Thread.run() выполнит код синхронно, в том же потоке, замените на start()

Комментариев нет:

Отправить комментарий