当前位置: 代码迷 >> java >> 如何在AsyncTask中取消doInBackground
  详细解决方案

如何在AsyncTask中取消doInBackground

热度:86   发布时间:2023-07-26 14:27:53.0

这是我的代码:

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);
        }
    }
}

如果用户输入的URL错误,并且doc为null。 然后我想展示一个吐司。

我已经阅读了有关取消AsyncTask其他一些主题,但是它更加独特,因为我在doInBackground方法内部有一个NPE,而在其他地方则没有。

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

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

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

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

您可以通过简单地调用xMLDownload.cancel(true);来取消AsyncTask xMLDownload.cancel(true);

如果urldoc任何一个为null,则只需返回null。

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

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