当asynctask重复运行时更改url / ip

时间:2014-04-24 07:49:47

标签: java android android-asynctask

我从我的服务中调用了GetXMLTask,它将每隔1秒重复调用一次从IP地址(MyIP)获取数据。

MyService.java

public class MyService extends Service {
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (GlobalFunctions.isInternetAvailable(MyService.this)
                || GlobalFunctions.isWifi(MyService.this)) {

            MyTimerTask myTask = new MyTimerTask();
            Timer myTimer = new Timer();

            myTimer.schedule(myTask, 1000, 1000);

        } else {
            Toast.makeText(MyService.this, "No Internet Connection", 1000).show();
        }

        return Service.START_STICKY;
    }

    class MyTimerTask extends TimerTask {
        public void run() {
            GetXMLTask task = new GetXMLTask();
            task.execute(new String[] { MyIP });
        }    
    }
}

asynctask用于GetXMLTask.java。

public class GetXMLTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {

        try {
            String output = null;
            for (String url : urls) {
                output = getOutputFromUrl(url);
            }
            return output;
        } catch (Exception e) {
            return null;
        }
    }
}

现在当应用程序运行时,我已经更改了ip地址,但是&#34; urls&#34;仍然显示以前的IP地址(请参阅eclipse调试模式中的数据),然后显示&#34; urls&#34;将在很长一段时间后更新。

我可以知道我该怎么做才能让asynctask中的网址直接占用最新的ip地址而不会有太长的延迟。

非常感谢你

2014年4月24日更新:

我对doinBackground代码进行了更改,但从IP地址收到的数据仍然不是更新的数据。

protected String doInBackground(String... urls) {
    try {
        String output = null;
        String[] newurl = {GlobalVariables.Global_URL + "/status.xml"};
        for (String url : newurl) {
            output = getOutputFromUrl(url);
        }

        return output;
    } catch (Exception e) {
        return null;
    }
}

有什么想法吗?谢谢

2014年4月25日更新:

我已经调试了代码,并注意到当IP地址发生变化时,asynctask似乎已经冻结了相当长的时间。我把断点放在了doinbackground中,它并没有进入。 任何的想法?谢谢

1 个答案:

答案 0 :(得分:0)

doInBackground中的for循环是按顺序处理URL。你可能需要在for循环中检查ip的变化,如果ip已经改变了需要的话(例如相应地更新URL)。