- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 XmlPullParser 从服务器解析文件,当然我是在另一个线程中执行的。我正在使用 rxAndroid 来处理线程,但它抛出 NetworkOnMainThread
异常(exception)。请帮助我。
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;
}
这是我的 RX 方法:
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) {
}
});
}
最佳答案
问题不在于从 UI 线程调用 Rx 方法。问题是您必须在非 UI 线程中执行网络操作,即 parseArticles()
。
您可以尝试这种方法 -
public void getArticles(String get, final boolean needRefresh) throws IOException {
Observable.create(new Observable.OnSubscribe<List< ArticleModel >>() {
@Override
public void call(Subscriber<? super List< ArticleModel >> subscriber) {
subscriber.onNext(parseArticles(get));
subscriber.onCompleted();
}
}).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) {
}
});
}
}
关于java - 使用 rxAndroid 的 URL.openStream networkOnMainThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36655687/
当我尝试实现以下代码时出现 NetworkOnMainThreadException: public class HandlingXMLStuff extends ListActivity{ stat
我正在尝试访问服务器以便接收 JSON 字符串。但显然在 Ice Cream Sandwich 中你不能在主线程中进行网络操作,但是 AsyncTask 类让我感到困惑并且无法正常工作。这是我到目前为
我遇到网络速度非常慢的问题。出于测试目的,我尝试使用 Android 4.0.4 完全切断 asynctask,当然我需要避免在主线程上进行网络调用,否则会出现 networkNotOnMainThr
我创建了一个应用程序,它使用 xml pull 解析器从 url 检索数据。它在模拟器上工作正常,但是当我在选项卡中测试它时,它显示 networkonmainthread 异常。我的代码是: pac
我在运行 https 时收到有关 Lollipop+ 上 NetworkOnMainThread 异常的报告api 调用使用 Retrofit和 RxAndroid . 我已经隔离了代码并创建了以下仍
我的应用程序中的一件事有问题。当我在调试器中启动应用程序时,它会抛出一个错误NetworkOnMainThreadException。更具体地说,当在线程(而不是主线程)中连接到 Web 服务器时会引
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (65 个回答) 已关闭 4 年前。 我收到"android.
这个问题在这里已经有了答案: How can I fix 'android.os.NetworkOnMainThreadException'? (66 个答案) 关闭 9 年前。 我在我的 andr
我尝试过使用 Scheduler.newThread() 和 Scheduler.io() 但还是不行这是我的代码 Observable loginObservable = Observable.cr
我正在制作一个 Android 应用程序来从用户获取数据并将其存储在 mongodb 数据库中 mongodb 在 localhost:27017 上运行,我可以在 genymotion 模拟器上使用
我有以下 rxJava 链: override fun combineLocationToPlace(req: Flowable): Flowable { var combinedF
这个问题已经有答案了: NetworkOnMainThread (3 个回答) 已关闭 7 年前。 我正在使用 XmlPullParser 从服务器解析文件,当然我是在另一个线程中执行的。我正在使用
我目前正在 Android 上试验 RxJava,在尝试将 AmbWith 运算符与两个 Observable 一起使用时遇到了问题。 正如我在此处的 amb 定义中所理解的 http://react
下面的代码始终在 Android 上抛出 NetworkOnMainThread,调用尝试是获取位置并使用它通过 RetroFit 2 API 获取列表,这在其他情况下工作正常,ReactiveLoc
我正在尝试在 Android 应用程序中使用 Google map 。 MainActivity 包含EditText、ImageButton 和MapView。当用户提供一些查询并点击 ImageB
您好,我正在研究 facebook api。我已经阅读了 facebook 文档并按照其中的说明进行了编码。下面的代码在 android 2.1-3.2 中运行良好,但是在 android 4.0.4
我是一名优秀的程序员,十分优秀!