我在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();
}
};`
粗体功能给我一个错误,内容如下:
Class'从DialogListener派生的匿名类'必须是 声明抽象或实现抽象方法 ' onException的(异常)'在' DialogListener'。
我不知道是什么问题,但是为了加重伤害,第一个@Override一切都很好,但是第二个,第三个和最后一个给了我这个错误:
错误:(91,17)错误:方法不会覆盖或实现方法 来自超类
这应该是一个有效的代码片段,所以这里有什么问题,为什么对某些@Overrides提出投诉?
这两个错误是否已连接?
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:
这就是我重写代码的方式:
@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?
}
}
发出警告:Condition 'exception instanceof OAuthException' is always 'false'
。
我将不得不继续努力,但这是一个不同的问题。
答案 0 :(得分:6)
正如您在评论中提到的,Deezer doc说DialogListener有3种方法: onCancel(),onComplete(Bundle values),onException(Exception exception)。
所以你必须只实现这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中可能存在相同的内容吗?
答案 1 :(得分:2)
在Java中实现匿名抽象类或接口时,必须为所有抽象方法(在抽象类的情况下)或在接口中声明的所有方法提供实现。
您收到错误通知您没有实现onException
中声明的DialogListener
方法。
其他错误很可能与第一个错误有关,但也不一定如此。通常,您所犯的单个错误可能会触发多个编译器错误,在这种情况下,当您首先清除另一个错误时也会被清除。当你遇到编译器错误时,你应该总是专注于清除第一个错误,因为其他可能是假错误而不是真正的问题。
"method does not override or implement a method from a supertype"
也可能意味着您声明的方法的签名与抽象类中的签名不匹配,在这种情况下,编译器不接受@Override
。