2015-01-01 3 views
8

github에서 미니 Deezer 플레이어를 찾았지만 이클립스로 코딩 된 것 같습니다. 나는 안드로이드 스튜디오에서 일하고있다.클래스는 abstract로 선언되거나 추상 메소드를 구현해야합니다

이 멍청한 놈 질문해야 내 첫 안드로이드 애플 리케이션을에 beeing, 그러나 나는 이것에 붙어 :

굵은 기능 나에게라는 오류주고있다
private DialogListener mDeezerDialogListener = new **DialogListener**() { 

      @Override 
      public void onComplete(Bundle values) { 
       // store the current authentication info 
       SessionStore sessionStore = new SessionStore(); 
       sessionStore.save(mDeezerConnect, LoginActivity.this); 

       // Launch the Home activity 
       Intent intent = new Intent(LoginActivity.this, HomeActivity.class); 
       startActivity(intent); 
      } 

      @Override 
      public void onDeezerError(final DeezerError deezerError) { 
       Toast.makeText(LoginActivity.this, R.string.deezer_error_during_login, 
         Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onError(final DialogError dialogError) { 
       Toast.makeText(LoginActivity.this, R.string.deezer_error_during_login, 
         Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(LoginActivity.this, R.string.login_cancelled, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onOAuthException(OAuthException oAuthException) { 
       Toast.makeText(LoginActivity.this, R.string.invalid_credentials, Toast.LENGTH_LONG) 
         .show(); 
      } 
     };` 

:

Class 'Anonymous class derived from DialogListener' must either be declared abstract or implement abstract method 'onException(Exception)' in 'DialogListener'.

을 나는 그 문제가 무엇인지 전혀 알지 못한다. 그러나 모욕을 외상에 추가하기 위해 모든 것이 첫 번째 @Override와 잘 맞지만 두 번째, 세 번째 그리고 마지막 하나는 나에게이 오류를 준다.

Error:(91, 17) error: method does not override or implement a method from a supertype

이 코드는 작동 코드 스 니펫 (snippet)으로 간주됩니다. 따라서 여기에있는 문제는 @Override 중 일부에 대한 불만 사항입니까?

두 오류가 연결 되었습니까?

EDIT1 :

@Override 
      public void onException(Exception exception) { 

      } 

첫 번째 오류가 도망 갔어요 :

으로 내가 다른 기능을 추가 제안했다. github의 원래 코드가 이전 버전의 SDK 용으로 작성된 것일까?

@Override 오류가 발생했습니다. 하지만 볼 수있는 한, 그것들은 onException의 하위 예외입니까?

EDIT2 :

이이 Deezer에 SDK에 정의되어

import com.deezer.sdk.network.connect.event.DialogListener; 

내가 그들의 문서에서 찾고 그것을 "방법의 개요"에서 언급 : onCancel(), onComplete(Bundle values), onException(Exception exception).

또한 void onException(Exception exception)은 인증 프로세스 중에 예외가 발생할 때 호출됩니다.

다음 예외가 발생 될 수있다 OAuthException, DeezerError, DialogError.

여기에 모든 추가 데이터를 게시 할 것입니다.

EDIT3 : Condition 'exception instanceof OAuthException' is always 'false' :

@Override 
    public void onException(Exception exception) { 

     if(exception instanceof DeezerError){ 
      Toast.makeText(LoginActivity.this, R.string.deezer_error_during_login, 
        Toast.LENGTH_LONG).show(); 
     } 
     else if(exception instanceof DialogError){ 
      Toast.makeText(LoginActivity.this, R.string.deezer_error_during_login, 
        Toast.LENGTH_LONG).show();  
     } 
     else if(exception instanceof OAuthException){ 
      Toast.makeText(LoginActivity.this, R.string.invalid_credentials, Toast.LENGTH_LONG) 
        .show();  
     } 
     else{ 
      //not implemented? 
     } 

    } 

경고를 제공합니다 :

이 내가 코드를 재 작성하는 방법입니다.

나는 그것에 대해 연구해야 할 것이지만, 지금은 다른 질문이다.

+0

DialogListener 클래스 (또는 인터페이스) 정의를 표시 할 수 있습니까? 그리고 예 2 개의 오류가 연결된 것 같습니다. – Thierry

+0

이것은 Deezer SDK에 정의되어 있습니다. import com.deezer.sdk.network.connect.event.DialogListener; 나는 그들의 문서를보고 있는데, "메소드 요약"아래에 onCancel(), onComplete (번들 값), onException (예외 예외)가 언급되어있다. 또한 그것은 다음과 같이 말합니다 : void onException (예외 예외)은 인증 프로세스 중에 예외가 발생할 때 호출됩니다. 다음과 같은 예외가 발생할 수 있습니다. OAuthException, DeezerError, DialogError. 나는 편집장과 함께 뭔가를 잃어버린 것 같아요 ?? – iggy

+0

@iggy 내 대답을 업데이트했습니다. – Thierry

답변

6

Deezer 의사는 DialogListener에 onCancel(), onComplete (번들 값), onException (예외 예외)의 세 가지 메소드가 있다고 말합니다.

그래서이 3 가지 기능 만 구현해야합니다.

 @Override 
     public void onComplete(Bundle values) { 
      // store the current authentication info 
      SessionStore sessionStore = new SessionStore(); 
      sessionStore.save(mDeezerConnect, LoginActivity.this); 

      // Launch the Home activity 
      Intent intent = new Intent(LoginActivity.this, HomeActivity.class); 
      startActivity(intent); 
     } 


     @Override 
     public void onCancel() { 
      Toast.makeText(LoginActivity.this, R.string.login_cancelled, Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onException(Exception e) { 
      // ... 
     } 

다른 방법을 제거하십시오 : onError 등등. 다른 버전의 SDK를 사용하는 것이 좋습니다.

참고 : Android Studio는 사용하지 않지만 이클립스에서는 'TODO'라는 말과 함께 필요한 메소드를 자동으로 생성하는 명령이 있습니다. Android Studio에도 동일한 기능이 있습니까?

+0

나는 안드로이드 스튜디오에서 6 시간 동안 프로그래밍하고있다. google it ... 감사합니다! – iggy

+0

@iggy 도움이되기를 바랍니다. 도움이된다면 대답을 수락하십시오. – Thierry

+0

두 사람 모두 대략 같은 해결책을 생각해 냈습니다. 동시. 둘 모두에게 어떻게 신용 할 수 있습니까? – iggy

2

Java에서 익명 추상 클래스 또는 인터페이스를 구현할 때 모든 추상 메소드 (추상 클래스의 경우) 또는 모든 메소드가 인터페이스에서 선언 된 경우 구현을 제공해야합니다.

오류 DialogListener에 선언 된 onException 메서드를 구현하지 않았다는 오류가 표시됩니다.

기타 오류는 첫 번째 오류와 연결될 가능성이 높지만 그럴 필요는 없습니다. 일반적으로 단일 오류로 인해 여러 컴파일러 오류가 발생할 수 있으며이 경우 첫 번째 오류를 지우면이 오류가 지워집니다. 컴파일러 오류가 발생하면 다른 오류가 아닌 실제 문제가 될 수 있으므로 항상 첫 번째 오류를 제거하는 데 집중해야합니다.

"method does not override or implement a method from a supertype"은 또한 선언 한 메서드의 서명이 추상 클래스의 서명과 일치하지 않으며이 경우 @Override이 컴파일러에서 허용되지 않음을 의미 할 수도 있습니다.

+0

고마워, 아직 거기에,하지만 함께 이동. 원본 게시물을 참조하십시오. – iggy

+0

마지막 편집 내용이 내 문제에 가까워지고 있다고 생각합니다 ... 감사합니다! – iggy