2015-01-01 13 views
8

私はgithub上でミニDeezerプレーヤーを見つけましたが、Eclipseでコード化されていると思います。私はしかし、Android Studioで動作します。クラスは抽象宣言または抽象メソッドを実装する必要があります

それはnoobの質問でなければなりませんが、私はこの上で立ち往生しています私の最初のAndroidアプリをbeeingて:

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

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(); 
      } 
     };` 

大胆機能は私に読み込みエラーを与えています私は何が問題なのか分かりませんが、怪我に侮辱を加えるために、最初の@Overrideはうまくいきますが、2番目と3番目と最後のものは私にこのエラーを与えます:

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

これは作業用のコードスニペットであると考えられていますので、ここで何が問題なのですか?@Overridesのいくつかに対する苦情はなぜですか?

これら2つのエラーは接続されていますか?

EDIT1:

としては、私は別の関数を追加した提案:

@Override 
      public void onException(Exception exception) { 

      } 

と最初のエラーが去っていきました。 githubの元のコードが以前のバージョンのSDK用に書かれていて、別のことをしたことがありますか?

@オーバーライドエラーが発生しました。しかし私が見る限り、それらはonExceptionのサブ例外ですか?

EDIT2:

これはDeezer SDKで定義されています

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

私は彼らのドキュメントを探していますし、それが "メソッドの概要" の下に言及: onCancel()onComplete(Bundle values)onException(Exception exception)

また、 void onException(Exception exception)は、認証処理中に例外がスローされたときに呼び出されます。

以下の例外が発生する場合があります OAuthExceptionDeezerErrorDialogError

ここにすべての追加データを掲載すると思います。

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

あなたのコメントで言及しているように、DialogListenerには、 onCancel()、onComplete(バンドル値)、onException(例外例外)の3つのメソッドがあります。

したがって、これらの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スタジオは使用しませんが、Eclipseでは必要なメソッドを自動的に作成するコマンドが用意されています(空欄、「TODO」と記載されています)。 Android Studioにも同じことがあるのでしょうか?

+0

私は、私はAndroidスタジオで6時間プログラミングしています。 googleそれは...ありがとう! – iggy

+0

@iggy助けてくれることを願っています。助けがあれば回答を受け入れてください。 – Thierry

+0

皆さんは皆、同じ解決策を出してくれました。同じ時間。私はあなたに両方を信用できますか? – iggy

2

Javaで匿名の抽象クラスまたはインタフェースを実装する場合は、すべての抽象メソッド(抽象クラ​​スの場合)またはすべてのメソッドをinterfaceで宣言する必要があります。

エラーDialogListenerで宣言されているonExceptionメソッドを実装していないと通知されています。

他のエラーは、最初のエラーに接続されている可能性が非常に高いですが、そのようにする必要はありません。通常、単一のエラーは、複数のコンパイラエラーを引き起こす可能性があります。そのような場合には、最初にクリアすると他のものもクリアされます。コンパイルエラーが発生した場合は、最初のものをクリアすることに焦点を当てるべきです。なぜなら、他のものが実際の問題ではなく偽のエラーである可能性があるからです。

"method does not override or implement a method from a supertype"は、宣言したメソッドのシグネチャが抽象クラスのシグネチャと一致しないこともあります。この場合、@Overrideはコンパイラで受け入れられません。

+0

ありがとう、まだありませんが、一緒に動いています。元の投稿を参照してください。 – iggy

+0

あなたの最後の編集が私の問題に近づいていると思います...ありがとう! – iggy

関連する問題