Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 类必须声明为抽象或实现抽象方法_Android_Deezer - Fatal编程技术网

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

Android 类必须声明为抽象或实现抽象方法,android,deezer,Android,Deezer,我在github上找到了一个迷你Deezer播放器,但我认为它是在Eclipse中编写的。然而,我在安卓工作室工作 在我的第一个Android应用程序中,这肯定是一个noob问题,但我被这个问题困住了: private DialogListener mDeezerDialogListener = new **DialogListener**() { @Override public void onComplete(Bundle values) {

我在github上找到了一个迷你Deezer播放器,但我认为它是在Eclipse中编写的。然而,我在安卓工作室工作

在我的第一个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();
            }
        };`
粗体函数给了我一个错误,如下所示:

类“从DialogListener派生的匿名类”必须为 声明抽象或实现抽象方法 “DialogListener”中的“OneException(Exception)”

我不知道问题出在哪里,但雪上加霜的是,第一个@Override的一切都很好,但是第二个、第三个和最后一个给了我这个错误:

错误:(91,17)错误:方法不重写或实现方法 从超类型

这应该是一个正常工作的代码片段,那么这里的问题是什么,为什么对某些@override有抱怨

这两个错误有联系吗

编辑1:

根据建议,我添加了另一个函数:

@Override
            public void onException(Exception exception) {

            }
第一个错误消失了。可能是github上的原始代码是为以前版本的SDK编写的,而SDK的功能有所不同吗

@覆盖错误仍然存在。但就我所见,这些是OneException的子例外

编辑2:


这在Deezer SDK中定义:

import com.deezer.sdk.network.connect.event.DialogListener; 
我正在查看他们的文档,其中在“方法摘要”中提到:
onCancel()
onComplete(捆绑值)
onException(异常异常)

它还说:
void-onException(异常异常异常)
在身份验证过程中引发异常时调用

可能会提出以下例外情况:
OAutheException
deezerror
对话框错误

我想我会在这里发布所有附加数据

编辑3:

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

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

    }
给出警告:
条件“OAutheException的异常实例”始终为“false”


我必须解决这个问题,但现在这是一个不同的问题。

在Java中实现匿名抽象类或接口时,必须为所有抽象方法(对于抽象类)或接口中声明的所有方法提供实现

您收到的错误通知您没有实现
DialogListener
中声明的
onException
方法

其他错误很可能与第一个错误有关,但也不一定是这样。通常,您犯的一个错误会触发多个编译器错误,在这种情况下,当您首先清除一个错误时,另一个错误也会被清除。当您确实遇到编译器错误时,您应该始终专注于清除第一个错误,因为其他错误可能是假的,而不是真正的问题


“方法不重写或实现超类型中的方法”
也可能意味着您声明的方法的签名与抽象类中的签名不匹配,在这种情况下,编译器不接受
@override

正如您在评论中提到的,Deezer文档说DialogListener有3种方法: 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的另一个版本


注意:我不使用androidstudio,但在Eclipse中,您有一个命令可以自动创建所需的方法(空,提到“TODO”)。Android Studio中可能也存在同样的问题?

您能给我们展示一下DialogListener类(或接口)定义吗?是的,这两个错误似乎是关联的。这是在Deezer SDK中定义的:import com.Deezer.SDK.network.connect.event.DialogListener;我正在查看他们的文档,它在“方法摘要”下提到:onCancel()、onComplete(Bundle值)、onException(异常)。它还说:当身份验证过程中抛出异常时,将调用void-onException(异常异常)。可能引发以下异常:OAutheException、DeezerError、DialogError。我想我错过了编辑的一些东西???@iggy我已经更新了我的答案。谢谢,还没有,但是继续。请参阅原始帖子。我认为您上次的编辑离我的问题越来越近了。。。谢谢我不知道,我已经在安卓工作室编程6小时了。谷歌会不会。。。谢谢@伊吉希望能有所帮助。如果答案有帮助的话,请接受。你们两人几乎在同一时间提出了相同的解决方案。我怎么能相信你们两个?当当,决定接受你们的答案,但不能投票给达利娅。对不起,Dalija,希望我最终会以某种方式回报你,你们都帮了我。不用担心,很高兴我能帮上忙:)