Die Klasse muss entweder als abstrakt deklariert oder als abstrakte Methode implementiert werden

8

Ich habe einen Mini-Deezer-Player auf GitHub gefunden, aber ich denke, er wurde in Eclipse codiert. Ich arbeite jedoch in Android Studio.

Da ich meine erste Android-App bin, muss es eine Frage ohne Frage sein, aber ich stehe fest:

%Vor%

Die fette Funktion gibt mir einen Fehler, der lautet:

  

Die Klasse 'Anonyme Klasse abgeleitet von DialogListener' muss entweder sein   abstrakt erklärt oder abstrakte Methode implementiert   'onException (Exception)' in 'DialogListener'.

Ich habe keine Ahnung, was das Problem ist, aber um die Verletzung zu beleidigen, ist alles gut mit dem ersten @Override, aber der zweite, der dritte und der letzte geben mir diesen Fehler:

  

Fehler: (91, 17) error: Methode überschreibt oder implementiert keine Methode   von einem Supertyp

Das soll ein funktionierendes Code-Snippet sein, also was ist das Problem hier, warum die Beschwerden bei einigen der @Overrides?

Sind diese beiden Fehler miteinander verbunden?

EDIT1:

Wie vorgeschlagen, habe ich eine weitere Funktion hinzugefügt:

%Vor%

und der erste Fehler ist weg. Könnte es sein, dass der ursprüngliche Code auf github für eine frühere SDK-Version geschrieben wurde, die anders aussah?

@Override Fehler blieben. aber soweit ich das sehe, sind das Unterausnahmen von onException?

EDIT2:

Dies ist im Deezer SDK definiert:

%Vor%

Ich schaue auf ihre Dokumentation und es erwähnt unter "Methodenübersicht": %Code%, %Code%, %Code%.

Es sagt auch: onCancel() wird aufgerufen, wenn während des Authentifizierungsprozesses eine Ausnahme ausgelöst wird.

Die folgenden Ausnahmen können ausgelöst werden: %Code%, %Code%, %Code%.

Ich denke, ich werde alle zusätzlichen Daten hier veröffentlichen.

EDIT3:

So habe ich den Code umgeschrieben:

%Vor%

Gibt eine Warnung aus: onComplete(Bundle values) .

Ich werde daran arbeiten müssen, aber das ist jetzt eine andere Frage.

    
iggy 01.01.2015, 18:56
quelle

2 Antworten

6

Wie Sie in Ihrem Kommentar erwähnt haben, sagt das Deezer-Dokument, dass DialogListener über drei Methoden verfügt: onCancel (), onComplete (Bündelwerte), onException (Exception-Ausnahme).

Sie müssen also NUR diese 3 Funktionen implementieren.

%Vor%

Und entfernen Sie die anderen Methoden: onError, etc. Vielleicht Sie Beispiel, wie Sie vorschlagen, ist für eine andere Version des SDK.

Hinweis: Ich verwende kein Android Studio, aber in Eclipse haben Sie einen Befehl zum automatischen Erstellen der benötigten Methoden (leer, mit Angabe von 'TODO'). Vielleicht gibt es das gleiche in Android Studio?

    
Thierry 01.01.2015, 20:24
quelle
2

Wenn Sie anonyme abstrakte Klassen oder Interfaces in Java implementieren, müssen Sie die Implementierung für alle abstrakten Methoden (im Falle einer abstrakten Klasse) oder für alle Methoden, die in der Schnittstelle deklariert sind, bereitstellen.

Fehler, dass Sie benachrichtigt werden, dass Sie die Methode onException , die in DialogListener deklariert ist, nicht implementiert haben.

Andere Fehler sind sehr wahrscheinlich mit der ersten verbunden, aber das muss auch nicht der Fall sein. Normalerweise können einzelne Fehler, die Sie vornehmen, mehrere Compiler-Fehler auslösen und in diesem Fall werden Sie gelöscht, wenn Sie den ersten Fehler löschen. Wenn Sie Compilerfehler erhalten, sollten Sie sich immer darauf konzentrieren, den ersten Fehler zu beheben, da es sich bei anderen möglicherweise um gefälschte Fehler und nicht um echte Probleme handelt.

"method does not override or implement a method from a supertype" kann auch bedeuten, dass die Signatur der von Ihnen deklarierten Methoden nicht mit den Signaturen in der abstrakten Klasse übereinstimmt und in diesem Fall @Override vom Compiler nicht akzeptiert wird.

    
Dalija Prasnikar 01.01.2015 19:37
quelle

Tags und Links