Timer Task始终返回false

时间:2014-05-17 10:26:46

标签: android timer timertask

我有这段代码

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

这段代码有什么不对 ?

1 个答案:

答案 0 :(得分:1)

在调用doTimerTaskforXML的run方法之前,它看起来像IsChanged完全执行的方法。这就是为什么你的默认值为false。如果要在同一个调用中立即返回值,则需要使用同步方法。

或者,(异步方法)您可以实现AsyncTask class,这最适合在后台解析xml。它有两个方法doInBackground和onPostExecute。你必须覆盖它们,将你的解析放在doInBackground方法中,当解析完成onPostExecute时,将运行回调。