На сервере есть https://api.androidhive.info/feed/feed.json (для примера с просторов)
Весь код в Service
Собственно код класса:
package tanat.androidtesttask;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
protected String someTask() {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String strJson = "";
// получаем данные с внешнего ресурса
try {
URL url = new URL("https://api.androidhive.info/feed/feed.json");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
strJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
strJson += e.getMessage();
}
return strJson;
}
}
Пытаюсь вытянуть json-строку, но ексепшен срабатывает на строке
InputStream inputStream = urlConnection.getInputStream();
то есть, не вытягивает даже InputStream.
Уже перерыл и stack весь и вообще весь интернет наверное, но никак не могу найти решение. Такой же код встречается много где на просторах и везде вроде как работает.
Ексепшен выдает
W/System.err: android.os.NetworkOnMainThreadException
<куча бреда>
W/System.err: at tanat.androidtesttask.MyService.someTask(MyService.java:34)
W/System.err: at
tanat.androidtesttask.MainActivity.onClick(MainActivity.java:46)
Похоже что ругается на
urlConnection.connect();
Помогите пожалуйста, спасибо.
Судя по ошибке вы пытаетесь обратиться к серверу в главном потоке. Так запрещено.
Можно использовать AsyncTask.
private class GetTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
\\здесь выполняйте обращение к серверу
return strJson;\\возврат строки с json
}
@Override
protected void onPostExecute(String answer) {
\\здесь сделайте необходимое с полученной строкой
Log.d(“tag”, answer)
}
}
Запускать так
new GetTask().execute();
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники