Android AsyncTask更改

时间:2014-02-04 15:11:15

标签: android android-asynctask

为什么,当我改变

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()。

2 个答案:

答案 0 :(得分:4)

错误告诉您无法在主线程上执行网络任务。 查看定义了NetworkOnMainThreadException的Android API以了解更多信息。

我希望这有帮助!

答案 1 :(得分:0)

想象一下你的方法downloadFile()花费的时间太长了 - 这将阻止UI。为了防止出现这种情况,您应该使用 AsyncTask 进行后台操作(我猜测下载您的文件),当它准备就绪时,将更新您的用户界面。在 doInBackground()中,将您的downloadFile()方法和 onPostExecute()处理结果。还要注意为 AsyncTask 类提供哪些参数。