【发布时间】:2015-02-28 06:47:18
【问题描述】:
我在 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();
}
};`
粗体功能给我一个错误,内容如下:
类“从 DialogListener 派生的匿名类”必须是 声明抽象或实现抽象方法 'DialogListener' 中的'onException(Exception)'。
我不知道是什么问题,但雪上加霜,第一个 @Override 一切正常,但第二个、第三个和最后一个给我这个错误:
Error:(91, 17) 错误:方法没有覆盖或实现方法 来自超类型
这应该是一个工作代码sn-p,那么这里有什么问题,为什么会抱怨一些@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(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'。
我将不得不解决这个问题,但现在这是一个不同的问题。
【问题讨论】:
-
你能告诉我们DialogListener类(或接口)的定义吗?是的,这两个错误似乎是相关的。
-
这是在 Deezer SDK 中定义的: import com.deezer.sdk.network.connect.event.DialogListener;我正在查看他们的文档,它在“方法摘要”下提到:onCancel()、onComplete(Bundle values)、onException(Exception exception)。它还说:在身份验证过程中抛出异常时调用 void onException(Exception exception)。可能会引发以下异常:OAuthException、DeezerError、DialogError。我想我错过了编辑器的一些东西??
-
@iggy 我已经更新了我的答案。