Observable
类已经可以使用,但是我仍然在与IObserver
挣扎。
在Xamarin文档中的“ IObserver”中,它说我只需为Update()
实现interface IObserver
方法。
我的问题:
当我添加: IObserver
时,我收到一个错误,指出我没有实现这两种方法:
public IntPtr Handle => throw new NotImplementedException();
public void Dispose()
{
throw new NotImplementedException();
}
为什么我需要这些方法,它们的用途是什么? Xamarin文档中未提及它们。
添加这些方法时,出现以下错误消息:
错误XA4212:类型firstTry3.bluetoothConnectionActivity/deviceFoundObserver
实现了Android.Runtime.IJavaObject
,但没有继承Java.Lang.Object
或Java.Lang.Throwable
。不支持。
当我将override
添加到update方法时,编译器说没有合适的方法可以覆盖
这是我的代码:
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");
}
}
}
我认为使用观察者的方式出了点问题。有人可以帮我吗?
答案 0 :(得分:0)
为什么我需要这些方法,它们的用途是什么?他们不是 在Xamarin文档中提到。
让我们看看IObserver
的定义:
namespace Java.Util
{
public interface IObserver : IJavaObject, IDisposable
{
void Update(Observable o, Lang.Object arg);
}
}
这里没有提到这两种方法,但是我们可以发现IObserver
继承自IJavaObject
和IDisposable
。然后转到IJavaObject
和IDisposable
的定义:
namespace Android.Runtime
{
public interface IJavaObject : IDisposable
{
IntPtr Handle { get; }
}
}
namespace System
{
public interface IDisposable
{
void Dispose();
}
}
我们可以在这里找到两种方法。 实现接口的类或结构必须实现接口定义中指定的接口成员。您还应该实现IJavaObject
和IDisposable
中定义的方法
添加这些方法时,出现以下错误消息:error XA4212:.....
添加这些方法后,我没有收到此错误。再试一次,您可以参考以下类似问题:error-xa4212,implementing-java-interfaces。
当我向更新方法添加替代项时,编译器会说 是不适合覆盖的方法
您不应将替代项添加到更新方法。只需实现接口中定义的方法即可,而不要覆盖。您可以在这里查看interface definition。