我有这段代码
ischanged = false;
public void doTimerTaskforXML(final GeneralObject Gen_Obj) {
XMLTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
String NewXML = "";
XMLParser parser = new XMLParser();
NewXML = parser.getXmlFromUrl(Gen_Obj.URL);
if (NewXML != null && NewXML != ""
&& NewXML.length() > 0) {
if (!Gen_Obj.XML.equals(NewXML)
|| Gen_Obj.XML.length() != NewXML.length()) {
ischanged = true;
Log.i(TAG, "XMl has been changed");
}
}
}
});
}
};
XMLTimer.schedule(XMLTimerTask, 0, 60000);
Log.i(TAG, "XNL not change");
}
public boolean IsChanged(GeneralObject Gen_Obj) {
doTimerTaskforXML(Gen_Obj);
Log.i(TAG, "ischanged= " + ischanged);
return ischanged;
}
检查xml更改
当我调用函数IsChanged并将其返回时,它总是返回false
这段代码有什么不对 ?
答案 0 :(得分:1)
在调用doTimerTaskforXML的run方法之前,它看起来像IsChanged完全执行的方法。这就是为什么你的默认值为false。如果要在同一个调用中立即返回值,则需要使用同步方法。
或者,(异步方法)您可以实现AsyncTask class,这最适合在后台解析xml。它有两个方法doInBackground和onPostExecute。你必须覆盖它们,将你的解析放在doInBackground方法中,当解析完成onPostExecute时,将运行回调。