如何在AsyncTask中取消doInBackground

时间:2015-07-16 08:11:08

标签: java android android-asynctask

这是我的代码:

class XMLDownload extends AsyncTask<URL, Void, ArrayList<HashMap<String, String>>> {

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(URL... urls) {
        if (cd.isConnectingToInternet()) {
            URL url = urls[0];
            XMLParser xmlParser = new XMLParser();
            String xml = xmlParser.getXMLFromUrl(url);

            Document doc = xmlParser.getDomElement(xml);
            if (doc == null){
                Toast.makeText(context,"Falsche URL",Toast.LENGTH_SHORT).show();                  
            } else {
                writeToFile(xml, "xmlfilesnames" + ".kx_todo");
                [...]
    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> xmlItems) {
        if (cd.isConnectingToInternet()) {
            CustomAdapterProjects adapter = new CustomAdapterProjects(ListViewActivity.context, projectItems);
            setListAdapter(adapter);
        }
    }
}

如果用户提供了错误的网址,doc为空。然后我想展示一个祝酒词。

我已经阅读了一些关于取消AsyncTask的其他主题,但这更独特,因为我有一个NPE INSIDE doInBackground方法而不是其他地方。

如何取消doInBackground方法。继续该方法是没有意义的。否则我会得到很多NPE(NullPointerException)。

3 个答案:

答案 0 :(得分:3)

if (doc == null) {
  return null;
}

onPostExecute检查xmlItems是否为空。如果为null,则显示Toast

答案 1 :(得分:1)

  

如何取消doInBackground方法。继续该方法是没有意义的。否则我会得到很多NPE(NullPointerException)。

您只需拨打AsyncTask即可取消xMLDownload.cancel(true);

答案 2 :(得分:0)

如果urldoc中的任何一个为空,则返回null。

if(doc == null || url == null){
  return null;
}

然后在onPostExceute你可以做任何你想做的事。