| 

.NET C# Java Javascript Exception

0
Hallo,

ich bin gerade dabei einen Service für Android zu schreiben. Dieser soll immer Daten im Hintergrund übertragen. Bei Google habe ich folgende Anleitung gefunden: http://developer.android.com/training/basics/network-ops/connecting.html

Nun habe ich das bei mir wie folgt umgesetzt:

public class GPSRueckmeldung extends Service implements LocationListener{
..
private class ConnectControlCenter extends AsyncTask {

@Override
protected void doInBackground(Location location){
try{
sendGPS(location);
} catch (IOException e) {
System.out.println("Hier gibt es einen Fehler");
}

}
}


So Eclipse sagt mit aber:
The method doInBackground(Location) of type GPSRueckmeldung.ConnectControlCenter must override a superclass method


und
The type GPSRueckmeldung.ConnectControlCenter must implement the inherited abstract method AsyncTask.doInBackground(Object...)


Im Google Beispiel wird aber auch die Methode doInBackground überschrieben? Hängt das eventuell daran, dass ich es als als Service und nicht als Activty geschrieben habe?
News:
21.06.2012
DTAG 170 1 8
1 Antwort
1
Beim Überschreiben ist die ganze Methoden-Signatur wichtig, und zu der gehören auch die Typen der Parameter. Ich bin mir nicht ganz sicher, was erwartet wird: laut Fehlermeldung "Object...", laut Google-Beispiel "String...", laut ergoogelter Doku "Params..." - keins davon aber paßt zu "Location", das Du verwendest. Probier mal als erstes "Object.." statt Location (und passe Deine Methode entsprechend an). Dein aktueller Code überschreibt die Methode aus der Basisklasse nicht, sondern überlädt sie.
21.06.2012
Matthias Hlawatsch 13,2k 4 9
1
Was wohl im Google Beispieltext fehlt ist private class ConnectControlCenter extends AsyncTask<Location, Void, Void> Da müssen wohl die Typen mit angegeben werden...
DTAG 21.06.2012
1
Oh ja, hatte beim Lesen der Doku übersehen, dass AsyncTask eine generische Klasse ist. "Params" war dann der Name des Typparameters. Wenn Du die Typparameter wegläßt, wird dann immer Object angenommen.
Möglicherweise war AsyncTask früher auch mal fix auf Strings eingestellt und wurde erst später generisch. Aber ich glaube, dass Du auch mit
AsyncTask<Location, Void, Void>
schreiben mußt
protected void doInBackground(Location... location)
also mit den Punkten für die optionalen Parameter.
Matthias Hlawatsch 21.06.2012
Übrigens habe ich gerade gesehn, dass die Anzahl Deiner Bewertungen deutlich kleiner ist als die Anzahl Deiner Fragen (die mehrhetlich beantwortet wurden). Magst Du das vielleicht mal ändern? Oder waren die bisherigen Antworten wirklich so schlecht???
Matthias Hlawatsch 21.06.2012

Stelle deine Android-Frage jetzt!