问题描述
这是我的代码:
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)。
1楼
if (doc == null) {
return null;
}
然后onPostExecute
检查xmlItems
是否为null。
如果为空,则显示Toast
2楼
我如何取消doInBackground方法。 继续该方法没有任何意义。 否则,我会得到很多NPE(NullPointerException)。
您可以通过简单地调用xMLDownload.cancel(true);
来取消AsyncTask
xMLDownload.cancel(true);
。
3楼
如果url
或doc
任何一个为null,则只需返回null。
if(doc == null || url == null){
return null;
}
然后在onPostExceute
您可以做任何您想做的事情。