Ich benutze XmlPullParser, die Datei vom Server analysieren, natürlich mache ich es in einem anderen Thread. Ich benutze rxAndroid, um mit Threads zu arbeiten, aber es wirft NetworkOnMainThread
Ausnahme. Bitte hilf mir.URL.openStream networkOnMainThread mit rxAndroid
public static List<ArticleModel> parseArticles(String get) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
URL url = new URL(get);
**parser.setInput(url.openStream(),null);** // HERE GOES THE EXCEPTION
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("article")) {
// create a new instance of employee
articleModel =new ArticleModel();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("article")) {
// add employee object to list
articleModelList.add(articleModel);
}else if (tagname.equalsIgnoreCase("id")) {
articleModel.setId(text);
} else if (tagname.equalsIgnoreCase("name")) {
articleModel.setName(text);
} else if (tagname.equalsIgnoreCase("image_url")) {
articleModel.setImage_url(text);
}
else if (tagname.equalsIgnoreCase("url")) {
articleModel.setUrl(text);
}
else if (tagname.equalsIgnoreCase("type")) {
articleModel.setType(text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
return articleModelList;
}
Und das ist meine RX-Methode:
public void getArticles(String get, final boolean needRefresh) throws IOException {
Observable.just(XmlPullParserHanlder.parseArticles(get))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<ArticleModel>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i("SIZE", "onNext: "+ e.toString());
}
@Override
public void onNext(List<ArticleModel> articleModels) {
}
});
}
Ich denke, Sie rufen 'parseArticles()' aus UI-Thread, deshalb erhalten Sie diese Ausnahme. –
@ShadabAnsari Was ist das Problem beim Aufruf der rx-Methode vom UI-Thread? –