private class ExecuteLocations extends AsyncTask<String, Void, Void>{
private final ProgressDialog dialog = new ProgressDialog(ListProfiles.this);
protected void onPreExecute() {
//this.dialog.setMessage("Starting pre-execute...");
//this.dialog.show();
}
@Override
protected Void doInBackground(String... arg0) {
check_profiles_lm=(LocationManager) ListProfiles.this.getSystemService(LOCATION_SERVICE);
myLocListen = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
HashMap params = new HashMap();
params.put("lat", Double.toString(location.getLatitude()));
params.put("long", Double.toString(location.getLongitude()));
postData("http://mydomain.com",params);
}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
};
check_profiles_lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 0, myLocListen);
return null;
}
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
//this.dialog.dismiss();
}
//Do something else here
}
}
基本上,我的目标是:
- 每隔一分钟左右不断将纬度/经度发布到我的网站。
- 当然,我想在另一个线程中执行此操作,这样就不会弄乱我的 UI 线程。这个 AsyncTask 应该可以解决这个问题......但它引发了一个错误,我不知道为什么。
你可以做什么来实现我的目标?非常简单...只需扫描位置并每分钟在后台发布到网络即可。
顺便说一句,我的onCreate方法是这样的。基本上就是这样。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ExecuteLocations().execute();
setContentView(R.layout.main_list);
}
最佳答案
将其分为 3 个步骤:
- 无需 AsyncTask,即可完成您想要的工作
- 确保您已经弄清楚了 AsyncTask,在
doInBackground(...)
中执行一个简单的 Log.e("haha", "gotcha") 并检查它是否显示 - 将两者结合起来。
对于这种情况,我可能会选择由 AlarmManager
触发的 Service
。我猜你无论如何都需要后者。
关于java - 我有一项 Activity 。在此 Activity 中,我执行了 AsyncTask ,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285917/