gpt4 book ai didi

java - 如何使用 Android 应用程序从 servlet 重复获取数据

转载 作者:行者123 更新时间:2023-12-01 12:44:50 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它反复从 java servlet 读取一些数据并将其绘制在 Google map 上。到目前为止,我已经成功获取了一次数据,但在重复该过程时遇到了麻烦。

我尝试过的基本上是这样的(因为我认为实际代码太长,所以我只使用它的必要 fragment 。并且实际代码运行没有任何错误。):

class TrackOnGoogleMap extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// initialize everything...
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
UpdateDriverLocationTask update = new UpdateDriverLocationTask();
update.execute(selectedDriver, location);
}

class UpdateTaxiLocationTask extends AsyncTask<String, String, Integer> {

@Override
protected Integer doInBackground(String... params) {

String tUser = params[0];
String location = params[1];

// fetch location from server 10 times
for (int i=0; i<10; i++) {
location = fetchTaxiLocation(tUser);
Log.d("SelectTaxi", "Location: " + location);
publishProgress(location);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

return 0;
}

@Override
protected void onProgressUpdate(String... loc) {
super.onProgressUpdate(loc[0]);

// the servlet returns location in the form of a String split by a ':'
String[] results = loc[0].split(":");
assert results.length == 2;
double lat = Double.parseDouble(results[0]);
double lng = Double.parseDouble(results[1]);

taxiLocation = new LatLng(lat, lng);

marker.setPosition(taxiLocation);

CameraUpdate update = CameraUpdateFactory.newLatLngZoom(
taxiLocation, 16);
map.animateCamera(update);
}

String fetchTaxiLocation(String taxiUser) {
String location = null;
try {
HttpURLConnection con = (HttpURLConnection) (new URL(url).openConnection());
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.connect();

con.getOutputStream().write(("t_user=" + taxiUser).getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
location = br.readLine();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return location;
}

}

}

由于我无法循环整个 AsyncTask,因此我在 AsyncTask 内使用循环来重复从服务器获取位置。但这里发生的情况是,它最终成为无限循环,并且不会显示任何运行时错误。

我对 Android 比较陌生,所以请原谅我可能犯的任何新手错误。谢谢。

最佳答案

看起来您只调用异步任务一次。我将创建一个timerTask,它以设定的时间间隔调用您的update.execute() 方法。在您的onResume 中,检查该计时器任务是否已在运行,如果没有则启动一个新任务。 .还要确保取消该计时器任务和异步任务 onPause

查看:http://developer.android.com/reference/java/util/TimerTask.html

关于java - 如何使用 Android 应用程序从 servlet 重复获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24804028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com