У меня есть один вид деятельности. В этом упражнении я выполнил AsyncTask, но он не работает - PullRequest
0 голосов
/ 18 февраля 2010
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. Конечно, я хочу сделать это в другом потоке, чтобы он не испортил мой поток пользовательского интерфейса. Эта AsyncTask должна решить эту проблему ... но выдает ошибку, и я не знаю почему.

Что вы можете сделать, чтобы достичь моей цели? Это очень просто ... просто сканируйте местоположение и публикуйте каждую минуту в фоновом режиме.

Кстати, мой метод onCreate такой. Вот и все.

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

Разбейте его на 3 шага:

  1. Делай все, что хочешь, работай без AsyncTask
  2. Убедитесь, что вы выяснили AsyncTask, выполните простой Log.e ("haha", "gotcha") в doInBackground(...) и убедитесь, что он показывает
  3. Объедините два.

В этом случае я бы, вероятно, выбрал Service, вызванный AlarmManager. Думаю, вам все равно понадобится последний.

0 голосов
/ 18 февраля 2010

Создайте это как сервис. Нет необходимости иметь Timer или AlarmManager, поскольку вы регистрируетесь для событий местоположения и действуете соответствующим образом.

Пример прослушивания событий местоположения можно найти на http://code.google.com/p/android-bluetooth-on-motion/source/browse/#svn/trunk/BluetoothOnMotion/src/com/elsewhat

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_NETWORK, MIN_DISTANCE_NETWORK,locationListener);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_GPS, MIN_DISTANCE_GPS,locationListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...