【问题标题】:Changing url/ip when asynctask is running repeatedly当 asynctask 重复运行时更改 url/ip
【发布时间】:2014-04-24 07:49:47
【问题描述】:

我已从我的服务调用 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 地址,但“urls”仍然显示以前的 IP 地址(请参阅 eclipse 调试模式中的数据),并且“urls”将在相当长的一段时间后更新很久了。

请问我应该怎么做才能让 asynctask 中的 url 可以直接获取最新的 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 地址更改时,异步任务似乎冻结了很长时间。我把断点放在doinbackground里,进不去。 任何想法?谢谢

【问题讨论】:

    标签: java android android-asynctask


    【解决方案1】:

    doInBackground 中的 for 循环是按顺序处理 url。您可能需要检查 for 循环中 ip 的变化,如果 ip 发生变化,请执行必要的操作(例如相应地更新 url)。

    【讨论】:

    • 先生。我对 doinbackground 代码进行了更改。但我仍然需要等待大约 1 到 2 分钟才能从新的 IP 地址获取更新的数据。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2018-01-15
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多