java - 我有一项 Activity 。在此 Activity 中,我执行了 AsyncTask ,但它不起作用

标签 java android geolocation android-activity android-asynctask

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 
    }

}

基本上,我的目标是:

  1. 每隔一分钟左右不断将纬度/经度发布到我的网站。
  2. 当然,我想在另一个线程中执行此操作,这样就不会弄乱我的 UI 线程。这个 AsyncTask 应该可以解决这个问题......但它引发了一个错误,我不知道为什么。

你可以做什么来实现我的目标?非常简单...只需扫描位置并每分钟在后台发布到网络即可。

顺便说一句,我的onCreate方法是这样的。基本上就是这样。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            new ExecuteLocations().execute();
            setContentView(R.layout.main_list);
    }

最佳答案

将其分为 3 个步骤:

  1. 无需 AsyncTask,即可完成您想要的工作
  2. 确保您已经弄清楚了 AsyncTask,在 doInBackground(...) 中执行一个简单的 Log.e("haha", "gotcha") 并检查它是否显示
  3. 将两者结合起来。

对于这种情况,我可能会选择由 AlarmManager 触发的 Service。我猜你无论如何都需要后者。

关于java - 我有一项 Activity 。在此 Activity 中,我执行了 AsyncTask ,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285917/

相关文章:

Android:LocationManager 泄漏,即使调用了removeUpdates

javascript - 是否有任何 gmap 的 api 函数来连接 AddressDetails 结构中的地址字符串?

android - 具有位置的 Google Maps 7.0.0 的 Intent

java - 黑莓计算器

java - Spring - 在 JPA 事务之后提交 JMS 事务

java - 在android中更改语言时如何更改操作栏语言

android - Stripe Android - 扫描卡片

java - 异常后使用java http连接实例

java - 如何在linux中设置servlet-api.jar文件的类路径

javascript - Google Maps API 突出显示地理区域数据