gpt4 book ai didi

android - 类必须声明为抽象的或实现抽象方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:42 25 4
gpt4 key购买 nike

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

作为我的第一个 Android 应用程序,这一定是一个菜鸟问题,但我坚持这个问题:

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

bold 函数 给我一个错误,内容如下:

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

这应该是一个有效的代码 fragment ,那么这里的问题是什么,为什么对某些 @Overrides 有提示?

这两个错误有关联吗?

编辑1:

按照建议我添加了另一个函数:

@Override
public void onException(Exception exception) {

}

第一个错误消失了。难道github上的原始代码是为以前版本的SDK编写的,做的东西不一样?

@Override 错误仍然存​​在。但据我所知,这些是 onException 的子异常?

编辑2:

这是在 Deezer SDK 中定义的:

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

我正在查看他们的文档,它在“方法摘要”下提到:onCancel(),onComplete(Bundle values),onException(异常异常)

它还说:void onException(Exception exception) 在认证过程中抛出异常时调用。

可能会引发以下异常:OAuthExceptionDeezerError,对话框错误

我想我会在这里发布所有额外的数据。

编辑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?
}

}

给出警告:条件“exception instanceof OAuthException”始终为“false”

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

最佳答案

正如您在评论中提到的,Deezer 文档说 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) {
// ...
}

并删除其他方法:onError 等。也许您的例子,正如您所建议的,是针对另一个版本的 SDK。

注意:我不使用 Android Studio,但在 Eclipse 中你有一个命令来自动创建所需的方法(空的,提到“TODO”)。也许 Android Studio 中也存在同样的情况?

关于android - 类必须声明为抽象的或实现抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com