代码之家  ›  专栏  ›  技术社区  ›  Kris B

“AmbientLifecycleObserver”是抽象的;无法实例化

  •  0
  • Kris B  · 技术社区  · 11 月前

    谷歌更新了WearOS中环境模式的工作方式,但我在实现这些更改时遇到了问题。

    这是他们做出的改变: https://android-review.googlesource.com/c/platform/frameworks/support/+/2534423

    重命名AmbientLifecycleObserverInterface->环境生命周期观察者

    问题是我现在收到以下错误消息:

    “AmbientLifecycleObserver”是抽象的;无法实例化

    我的代码看起来与他们提供的示例代码完全相同:

    https://android-review.googlesource.com/c/platform/frameworks/support/+/2534423/4/wear/wear-samples-ambient/src/main/java/androidx/wear/samples/ambient/MainActivity.kt

    所以我对自己做错了什么感到困惑。这是的代码 AmbientLifecycleObserver 以下为:

    https://android-review.googlesource.com/c/platform/frameworks/support/+/2534423/4/wear/wear/src/main/java/androidx/wear/ambient/AmbientLifecycleObserver.kt

    这是我的代码:

    private AmbientLifecycleObserver mAmbientLifecycleObserver;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        //getting error 'AmbientLifecycleObserver' is abstract; cannot be instantiated
        mAmbientLifecycleObserver = new AmbientLifecycleObserver(this, mAmbientCallback);
                
        getLifecycle().addObserver(mAmbientLifecycleObserver);
    }
    
    
    
    final AmbientLifecycleObserver.AmbientLifecycleCallback mAmbientCallback = new AmbientLifecycleObserver.AmbientLifecycleCallback() {
    
        @Override
        public void onEnterAmbient(@NonNull AmbientLifecycleObserver.AmbientDetails ambientDetails) {
    
        }
    
        @Override
        public void onUpdateAmbient() {
    
        }
    
        @Override
        public void onExitAmbient() {
    
        }
    };
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   ianhanniballake    11 月前

    如果你看看 actual change they made 这个 AmbientLifecycleObserver 你在他们的代码中看到的调用是 构造函数-它是一个顶级函数调用(例如,静态方法),恰好返回接口的实例 环境生命周期观察者

    因为他们的代码在Kotlin中,调用一个顶级函数 外观 就像构造函数一样。

    然而,在Java代码中,您需要使用与静态方法相同的语法来调用该顶级函数,在本例中,调用的是为每个文件创建的自动生成的类, AmbientLifecycleObserverKt 以下为:

    mAmbientLifecycleObserver = AmbientLifecycleObserverKt.AmbientLifecycleObserver(
       this, mAmbientCallback);
    

    您可以在 API signature file