【问题标题】:IObserver is missing methodsIObserver 缺少方法
【发布时间】:2019-01-02 15:19:46
【问题描述】:

Observable 类已经可以使用,但我仍在努力使用 IObserver

在“IObserver”的 Xamarin 文档中,它说我只需为 interface IObserver 实现 Update() 方法。

我的问题:

  1. 当我添加 : IObserver 时,我得到一个错误,我没有实现这两种方法:

            public IntPtr Handle => throw new NotImplementedException();
    
        public void Dispose()
        {
            throw new NotImplementedException();
        }
    

    为什么我需要这些方法,它们的用途是什么? Xamarin 文档中未提及它们。

  2. 当我添加这些方法时,我收到以下错误消息: 错误 XA4212:类型 firstTry3.bluetoothConnectionActivity/deviceFoundObserver 实现 Android.Runtime.IJavaObject 但不继承 Java.Lang.ObjectJava.Lang.Throwable。不支持。

  3. 当我在更新方法中添加override时,编译器说没有合适的方法可以覆盖

这是我的代码:

        public class deviceFoundObserver : IObserver
    {
        bluetoothConnectionActivity mActivity;

        public deviceFoundObserver(bluetoothConnectionActivity a)
        {
            mActivity = a;
        }

        //function is called from subject observable whenever a change happened
        public override void Update(Observable observable, Java.Lang.Object data)       //perhaps arguments like this: Observable observable, Object data
        {
            //there could be other messages as well, so first check wheather it is the right call from observer
            if ((string)data == deviceName)
            {
                mActivity.buttonStartEKG.Visibility = ViewStates.Visible;
                Log.Info(constants.tag, MethodBase.GetCurrentMethod().Name + ": Observable called update function in Observer");
            }
        }
    }

我认为我在使用观察者的方式上有问题。谁能帮帮我?

【问题讨论】:

    标签: c# android xamarin.android observer-pattern


    【解决方案1】:

    为什么我需要这些方法,它们的用途是什么?他们不是 Xamarin 文档中提到。

    我们来看看IObserver的定义:

    namespace Java.Util
    {
        public interface IObserver : IJavaObject, IDisposable
        {
            void Update(Observable o, Lang.Object arg);
        }
    }
    

    这里没有提到这两个方法,但是我们可以发现IObserver继承自IJavaObjectIDisposable。然后去IJavaObjectIDisposable的定义:

    namespace Android.Runtime
    {
        public interface IJavaObject : IDisposable
        {
            IntPtr Handle { get; }
        }
    }
    
    namespace System
    {
        public interface IDisposable
        {
            void Dispose();
        }
    }
    

    我们可以在这里找到这两种方法。 实现接口的类或结构必须实现接口定义中指定的接口成员。您还应该实现IJavaObjectIDisposable中定义的方法。

    当我添加这些方法时,我收到以下错误消息:错误 XA4212:.....

    添加这些方法后,我没有收到此错误。再试一次,你可以参考这些类似的问题:error-xa4212implementing-java-interfaces

    当我将覆盖添加到更新方法时,编译器会说 没有合适的方法来覆盖

    不应将覆盖添加到更新方法。只需实现接口中定义的方法,而不是重写。您可以在这里查看interface definition

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      相关资源
      最近更新 更多