Frage

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 
    }

}

Im Grunde genommen mein Ziel ist:

  1. Ständig post die Breite / Länge auf meine Website jede Minute oder so.
  2. Natürlich möchte ich dies in einem anderen Thread tun, damit es nicht vermasselt meinen UI-Thread. Diese AsyncTask wird angenommen, dass zu lösen ... aber es ist ein Fehler zu bringen, und ich weiß nicht, warum.

Was können Sie tun, um mein Ziel zu erreichen? Es ist sehr einfach ... nur Scan Lage und Post auf dem Web jede Minute, in den Hintergrund.

übrigens, meine onCreate Methode ist wie diese. Das ist im Grunde ist es.

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

Lösung

Break it in 3 Schritten:

  1. Machen, was Sie zur Arbeit arbeiten wollen w / o AsyncTask
  2. Stellen Sie sicher, dass Sie aus AsyncTask dachte ich, tun ein einfaches Log.e ( "haha", "Gotcha") in doInBackground(...) und prüfen, ob es zeigt
  3. Kombinieren Sie die beiden.

Für diesen Fall würde ich mit einem Service geht wahrscheinlich durch AlarmManager ausgelöst. Ratet mal, Sie werden die letzteren müssen sowieso.

Andere Tipps

Erstellen Sie dies als Service. Keine Notwendigkeit, einen Timer oder Alarmmanager, wie Sie für die Lage Ereignisse registrieren und handeln entsprechend.

Ein Beispiel des Hörens Lage Veranstaltungen finden Sie unter 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top