【问题标题】:Facebook Android SDK source will not compile with Eclipse IndigoFacebook Android SDK 源代码无法与 Eclipse Indigo 一起编译
【发布时间】:2012-02-07 02:53:11
【问题描述】:

感谢this,终于让Android Facebook SDK正确导入后,我发现eclipse无法识别FbDialog.java中onclick的覆盖:

mCrossImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mListener.onCancel();
        FbDialog.this.dismiss();
    }
});

也不识别ServiceConnection的TokenRefreshServiceConnection实现中onServiceConnected和onServiceDisconnected的覆盖

@Override
public void onServiceConnected(ComponentName className, IBinder service) {
    messageSender = new Messenger(service);
    refreshToken();
}

@Override
public void onServiceDisconnected(ComponentName arg) {
    serviceListener.onError(new Error("Service disconnected"));
    // We returned an error so there's no point in
    // keeping the binding open.
    mAuthActivity.unbindService(TokenRefreshServiceConnection.this);
}

所有三个方法都在警告中说,该方法必须覆盖超类方法。我还没有修改代码。我检查了 Eclipse 是否将相应的超类中的类型识别为相同的类型,并且我尝试按 control-shift-o 来组织导入,这是针对类似问题在 this answer 中建议的修复方法。

这些覆盖是 SDK 的一部分,而不是任何单独的项目。我将项目设置为使用 Facebook 说明中显示的 Android SDK 2.2 和 4.0.3,理论上应该与所有以前的版本兼容。我还没有让 Facebook 自己的代码工作。作为旁注,有没有我可以使用的罐子?这会让这件事变得容易得多。

【问题讨论】:

    标签: android facebook facebook-android-sdk


    【解决方案1】:

    猜测您的项目属性 -> Java 编译器 编译器合规级别设置为 1.5,而不是 1.6(或更高)。

    改变这个。

    Why is javac failing on @Override annotation

    【讨论】:

    • 哦,我以为我在 1.6/1.7 上就有了。这是我一直遇到的问题。谢谢!
    【解决方案2】:

    懒惰、快速和简单的解决方法是删除 @Override 注释。正确的修复方法是检查项目是否编译为 Java 1.5 或更高版本,使用 Eclipse 中的“修复项目属性”,并可能检查 Facebook 库项目是否使用与您的项目相同的 Android SDK 进行编译。

    【讨论】:

    • 我曾经这样做过,但这只是让它可以编译,而不是运行。不过,我会编辑我的帖子,所以我可以提一下,我无法编译 Facebook Android SDK 本身,而不是我的项目。而且我尝试过使用不同的 SDK(特别是 2.2 和最新的,理论上应该与所有以前的版本兼容),都没有奏效。
    • 您检查过 Eclipse 的“问题”视图吗?它在 Indigo 中默认不显示,通常包含您需要的所有信息
    • 这实际上并没有告诉我我在代码中没有看到的任何内容。 “new View.OnClickListener(){} 类型的方法 onClick(View) 必须覆盖超类方法”、“Facebook.TokenRefreshServiceConnection 类型的方法 onServiceConnected(ComponentName, IBinder) 必须覆盖超类方法”和“onServiceDisconnected 方法Facebook.TokenRefreshServiceConnection 类型的 (ComponentName) 必须覆盖超类方法”。
    • 好吧,我尝试再次删除 Override 注释,并且成功了。让我发疯,但我相当肯定抽象方法需要被声明为覆盖。显然不是?我检查了 Eclipse 认为它从哪里获得这些方法,它确实来自扩展的抽象类。此外,图书馆和我的程序现在都可以工作。我唯一的问题是:如果代码覆盖了抽象方法,为什么我不能在这种情况下使用 Override?​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多