我在为 RssReader 运行我的 Android 项目时遇到错误。
法典:
URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
它显示以下错误:
android.os.NetworkOnMainThreadException
如何解决此问题?
网友回答:
几乎应始终在线程上运行网络操作或作为异步任务运行。
但是,如果您愿意接受后果,则可以删除此限制并覆盖默认行为。
加:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
在你的课堂上,
和
在 Android 清单.xml文件中添加此权限:
<uses-permission android:name="android.permission.INTERNET"/>
后果:
您的应用将(在 Internet 连接不稳定的区域)变得无响应并锁定,用户感知到速度缓慢并必须执行强制杀伤,并且您冒着活动管理器杀死您的应用并告诉用户应用已停止的风险。
Android 有一些关于良好编程实践的好技巧,用于设计响应能力:
NetworkOnMainThreadException |安卓开发者
网友回答:
注意:AsyncTask 在 API 级别 30 中已弃用。
异步任务|安卓开发者
当应用程序尝试在其主线程上执行网络操作时,将引发此异常。在 中运行代码:AsyncTask
class RetrieveFeedTask extends AsyncTask<String, Void, RSSFeed> {
private Exception exception;
protected RSSFeed doInBackground(String... urls) {
try {
URL url = new URL(urls[0]);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
} catch (Exception e) {
this.exception = e;
return null;
} finally {
is.close();
}
}
protected void onPostExecute(RSSFeed feed) {
// TODO: check this.exception
// TODO: do something with the feed
}
}
如何执行任务:
在文件中,您可以在方法中添加此行MainActivity.java
oncreate()
new RetrieveFeedTask().execute(urlToRssFeed);
不要忘记将其添加到文件中:AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
网友回答:
我使用新的.Thread
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
模板简介:该模板名称为【如何修复错误“android.os.NetworkOnMainThreadException”?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。