Сначала столкнулся с этим при попытке создания сети в основном потоке пользовательского интерфейса. Затем попытался избежать этого с помощью AsyncTask, но все равно получить то же Исключение. Сетевое взаимодействие происходит только внутри метода AsyncTask.doInBackground()
. Но я все еще получаю это исключение. Как это исправить?NetworkOnMainThreadException внутри метода AsyncTask.doInBackground()
public class AsyncRSSLoader extends AsyncTask<Void, Void, RSSData> {
private String url = "http://www.nasa.gov/rss/dyn/image_of_the_day.rss";
@Override
protected RSSData doInBackground(Void... params) {
try {
IotHandler handler = new IotHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(handler);
InputStream inputStream = new URL(url).openStream();
reader.parse(new InputSource(inputStream));
RSSData data = new RSSData();
data.setDate(handler.getDate());
data.setTitle(handler.getTitle());
data.setImage(getBitmap(handler.getImageUrl()));
return data;
} catch (Exception e) {
e.printStackTrace();
Log.e("NASA_RSS", e.getStackTrace().toString());
}
return null;
}
}
и использование этого класса:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AsyncRSSLoader loader = new AsyncRSSLoader();
RSSData data = loader.doInBackground();
resetDisplay(data.getTitle(), data.getDate(), data.getImage(), data.getDescription());
}