У меня есть одно Занятие.В этом Упражнении я выполнил AsyncTask , но это не работает

StackOverflow https://stackoverflow.com/questions/2285917

Вопрос

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

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

Кстати, мой метод onCreate выглядит следующим образом.Вот, в принципе, и все.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            new ExecuteLocations().execute();
            setContentView(R.layout.main_list);
    }
Это было полезно?

Решение

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

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

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

Другие советы

Создайте это как Сервис.Вам не нужно иметь таймер или 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top