必须将类声明为abstract或实现抽象方法

igg*_*ggy 8 android deezer

我在github上找到了一个迷你Deezer播放器,但我认为它已经在Eclipse中编码了.然而,我在Android Studio工作.

Beeing我的第一个Android应用程序它必须是一个noob问题,但我坚持这个:

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();
            }
        };`
Run Code Online (Sandbox Code Playgroud)

大胆的功能是给我的读取错误:

类''派生自DialogListener的匿名类'必须被声明为abstract或在'DialogListener'中实现抽象方法'onException(Exception)'.

我不知道是什么问题,但是为了加重伤害,第一个@Override一切都很顺利,但是第二个,第三个和最后一个给了我这个错误:

错误:(91,17)错误:方法不会覆盖或实现超类型的方法

这应该是一个有效的代码片段,所以这里有什么问题,为什么对某些@Overrides的投诉呢?

这两个错误是否相关?

EDIT1:

建议我添加另一个功能:

@Override
            public void onException(Exception exception) {

            }
Run Code Online (Sandbox Code Playgroud)

并且第一个错误消失了.可能是github上的原始代码是为以前版本的SDK编写的,它做的事情不同吗?

@Override错误仍然存​​在.但据我所知,那些是onException的子例外?

EDIT2:

这在Deezer SDK中定义:

import com.deezer.sdk.network.connect.event.DialogListener; 
Run Code Online (Sandbox Code Playgroud)

我在看他们的文档,并将其"方法摘要"下提到: onCancel(), onComplete(Bundle values), onException(Exception exception).

它还说: void onException(Exception exception)在身份验证过程中抛出异常时调用.

以下例外情况可提出: OAuthException, DeezerError, DialogError.

我想我会在这里发布所有其他数据.

EDIT3:

这就是我重写代码的方式:

@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?
        }

    }
Run Code Online (Sandbox Code Playgroud)

发出警告:Condition 'exception instanceof OAuthException' is always 'false'.

我将不得不继续努力,但这是一个不同的问题.

Thi*_*rry 6

正如您在评论中提到的,Deezer doc说DialogListener有3个方法:onCancel(),onComplete(Bundle values),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) {
          //    ...
        }
Run Code Online (Sandbox Code Playgroud)

并删除其他方法:onError等.也许你的例子,如你所说,是另一个版本的SDK.

注意:我不使用Android Studio,但是在Eclipse中你有一个命令来自动创建所需的方法(空,提到'TODO').Android Studio中可能存在同样的情况吗?