我目前正在使用GitGub上的开发人员jjoe64中的GraphView
,我想知道如何将我在BT连接的线程类中创建的double
检索到GraphView
类。这是调用随机数据的原始函数,但我想从BlueTooth类中获取串行数据
此实时图表中的当前函数是:
private double getRandom() {
double high = 3;
double low = 0.5;
return Math.random() * (high - low) + low;
}
在我的蓝牙课程中,我有ConnectedThread.read()
命令,但它并没有真正起作用。这是:
public static double read() {
try {
byte[] buffer = new byte[1024];
double bytes = mmInStream.read(buffer);
return bytes;
} catch(IOException e) {
return 5;
}
}
我不确定我的手机是不是太慢了,它运行的是Android2.3(DesireHD),但我学校的教授说如果我打电话给ConnectedThread.read()
它并且它等于它就应该可以正常工作一个double
。有什么建议吗?
答案 0 :(得分:2)
你没有提供足够的信息来开箱即用的解决方案,但无论如何我都会试一试。
首先,我假设mmInStream
是InputStream
或其子类。查看int InputStream.read(byte[] b)
的API:
从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。
这意味着您从read()
方法返回的内容只是从buffer
写入mmInStream
的字节数。这可能不是你想要做的。您可能想要做的是从此流中只读取值。要做到这一点,你应该:
在创建mmInStream
之后将DataInputStream
包裹在mmInStream
中:
mmInStream = yourMethodCreatingInputStream();
dataInStream = new DataInputStream(mmInStream);
从double
读取dataInStream
值。但是,与所有计算机系统一样,您必须了解输入值的确切格式。您必须参考用于获取输入数据的设备规范。
现在dataInStream
派上用场了,因为它抽象了必要的低级IO操作,让您专注于数据。它会自动将您对数据的查询转换为IO操作。例如:
如果您的数据采用double
格式(我相信您的教授的话就是这种情况),那么您的read()
方法就像以下一样简单:
public static double read() {
return dataInStream.readDouble();
}
如果数据以float
格式出现:
public static double read() {
return (double)dataInStream.readFloat();
}
但同样,请务必查阅您所使用的设备的规格以获取确切的格式。有些设备可能会以异常格式传递数据,例如:“前2个字节是结果值的整数部分,后2个字节是小数部分”。作为数据的消费者,您可以遵循其格式。