Первый проект на java. Как решить NetworkOnMainThreadException? Доброе время суток!
Изучаю java и android. Помогите разобраться с первым тестовым проектом.
Файлы: YandexTranslate.java и MainActivity.java
Вылетает ошибка NetworkOnMainThreadException. Как я понимаю она обычно бывает в том случае когда обращение к интернету в main. Я вынес ее в отделенный класс, почему у меня появляется эта ошибка? Как исправить?
Из консоли:09-07 13:46:04.796 25701-25701/info.stekolschikov.ytranslate E/AndroidRuntime: FATAL EXCEPTION: main
Process: info.stekolschikov.ytranslate, PID: 25701
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1166)
at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
at info.stekolschikov.ytranslate.YandexTranslate.translate(YandexTranslate.java:58)
at info.stekolschikov.ytranslate.MainActivity$1.onClick(MainActivity.java:40)
at android.view.View.performClick(View.java:4851)
at android.view.View$PerformClick.run(View.java:20016)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5429)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)

21 Авг 2019 в 07:03
156 +1
0
Ответы
1

Ошибка NetworkOnMainThreadException возникает, когда попытка выполнить сетевую операцию (например, HTTP-запрос) выполняется в главном потоке приложения. Это запрещено в Android, так как выполнение долгих операций в главном потоке может привести к зависанию интерфейса пользователя.

Чтобы исправить эту ошибку, необходимо вынести сетевую операцию из главного потока и выполнить ее в фоновом потоке. В Android для выполнения асинхронных задач обычно используется AsyncTask или библиотека Retrofit.

Пример использования AsyncTask для выполнения сетевой операции в фоновом потоке:

public class YandexTranslateTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// Выполнение сетевой операции здесь
// Например, HTTP-запрос
return "";
}
@Override
protected void onPostExecute(String result) {
// Обработка результата сетевой операции
}
}

Затем вызовите этот AsyncTask из вашего MainActivity:

new YandexTranslateTask().execute();

Таким образом, вы перенесете выполнение сетевой операции из главного потока в фоновый поток и избежите ошибки NetworkOnMainThreadException.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 340 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир