【发布时间】: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