[英]C# Equivalent events in Java
我已经用C#开发了一个基于PC的API,可以与嵌入式电子设备进行通信。 该API读取PC COM端口,解码数据包,构造数据包并引发事件。 现在,我需要在Android移动版中开发相同的API。 由于C#和Java事件之间存在差异,因此我很困惑如何在Java中实现相同目标。
以下C#代码引发事件:
public class MARGserial
{
dataObject = BT_DeconstructPacket(encodedPacket);
if (dataObject != null) // if packet successfully deconstructed
{
OnMARGdataReceived(dataObject);
if (dataObject is RawMARGdata)
{
OnRawMARGdataReceived((RawMARGdata)dataObject);
PacketsReadCounter.RawMARGdataPackets++;
}
}
public delegate void onRawMARGdataReceived(object sender, RawMARGdata e);
public event onRawMARGdataReceived RawMARGdataReceived;
protected virtual void OnRawMARGdataReceived(RawMARGdata e)
{
if (RawMARGdataReceived != null)
RawMARGdataReceived(this, e);
}
}/*End of MARGserial class */
以下代码用于订阅Windows控制台应用程序中的Event OnRawMARGdataReceived
。
public static MARG_api.MARGserial MARGserial = new MARG_api.MARGserial("COM44");
MARGserial.RawMARGdataReceived += new MARG_api.MARGserial.onRawMARGdataReceived(MARGserial_RawMARGdataReceived);
static void MARGserial_RawMARGdataReceived(object sender, MARG_api.RawMARGdata e)
{
Console.WriteLine("Data : " + e.Accelerometer[0].ToString() + " "+e.Accelerometer[1].ToString()+ " "+e.Accelerometer[2].ToString());
}
如果是Android Java应用程序,则应用程序本身中的Main Activity类必须订阅在另一个类线程内部触发的事件(此线程读取Bluetooth缓冲区并构造数据包)
您可以在这里使用设计模式,尤其是观察者:
在Observer中,有一个名为IObserver的接口,带有一个名为update()的方法,您可以使所有感兴趣的对象实现。 然后,主对象存储一组s,并且在发生某些情况时,它将对该集合中的每个对象(本质上是回调)调用.update()。 如果您希望以这种方式使用GUI(当模型状态更改并且需要更新视图时),这在MVC架构中也很常见。
您还可以使用Command设计模式来实现Delegate风格的一阶函数,这在Java中非常有用,因为它对此概念没有本地支持。
我不确定以上内容是否对您的特定情况有所帮助,但是设计模式通常是解决各种问题的好方法。
我成功开发了android应用程序,可以使用Google提供的BluetoothChat示例连接到我的蓝牙设备。 设备的蓝牙模块具有来自RovingNetworks(RN-41)的 SPP(串行端口配置文件) 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.