为什么,当我改变
时private class DownloadTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
try {
Downloader.DownloadFromUrl("http://www.sciencemag.org/rss/news.xml", openFileOutput("Sciencemag.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result){
mAdapter = new SiteAdapter(MainActivity.this, -1, XmlParser.getSingleItemsFromFile(MainActivity.this));
sitesList.setAdapter(mAdapter);
}
}
到
private void downloadFile(){
try {
Downloader.DownloadFromUrl("http://www.sciencemag.org/rss/news.xml", openFileOutput("Sciencemag.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mAdapter = new SiteAdapter(MainActivity.this, -1, XmlParser.getSingleItemsFromFile(MainActivity.this));
sitesList.setAdapter(mAdapter);
}
我收到错误?我只想调用方法downloadFile()而不是创建内部类DownloadTask的实例并调用此实例的execute()。
答案 0 :(得分:4)
错误告诉您无法在主线程上执行网络任务。 查看定义了NetworkOnMainThreadException的Android API以了解更多信息。
我希望这有帮助!
答案 1 :(得分:0)
想象一下你的方法downloadFile()花费的时间太长了 - 这将阻止UI。为了防止出现这种情况,您应该使用 AsyncTask 进行后台操作(我猜测下载您的文件),当它准备就绪时,将更新您的用户界面。在 doInBackground()中,将您的downloadFile()方法和 onPostExecute()处理结果。还要注意为 AsyncTask 类提供哪些参数。