这是我的代码:
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)。
答案 0 :(得分:3)
if (doc == null) {
return null;
}
和onPostExecute
检查xmlItems
是否为空。如果为null,则显示Toast
答案 1 :(得分:1)
如何取消doInBackground方法。继续该方法是没有意义的。否则我会得到很多NPE(NullPointerException)。
您只需拨打AsyncTask
即可取消xMLDownload.cancel(true);
。
答案 2 :(得分:0)
如果url
或doc
中的任何一个为空,则返回null。
if(doc == null || url == null){
return null;
}
然后在onPostExceute
你可以做任何你想做的事。