0

我目前在GraphViewGitGub 上使用开发人员 jjoe64 提供的,我想知道如何将double我在我的 BT 连接线程类中创建的检索到GraphView该类。这是调用随机数据的原始函数,但我想要来自我的蓝牙类的串行数据这个实时图中的当前函数是:

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. 有什么建议吗?

4

1 回答 1

2

您没有为开箱即用的解决方案提供足够的信息,但无论如何我都会试一试。

首先,我认为这mmInStream是一个InputStream或其子类。查看以下 API int InputStream.read(byte[] b)

从输入流中读取一些字节并将它们存储到缓冲区数组 b. 实际读取的字节数以整数形式返回。在输入数据可用、检测到文件结尾或引发异常之前,此方法会一直阻塞。

这意味着您从read()方法返回的只是已写入bufferfrom的字节数mmInStream。这可能不是你想要做的。您可能想要做的只是从该流中读取值。为此,您应该:

  • 在创建之后将您包装mmInStream在 a中:DataInputStreammmInStream

    mmInStream = yourMethodCreatingInputStream();
    dataInStream = new DataInputStream(mmInStream);
    
  • 从 中读取doubledataInStream。但与所有计算机系统一样,您必须了解输入值的确切格式。您必须参考用于获取输入数据的设备的规范。

现在dataInStream派上用场了,因为它抽象了必要的低级 IO 操作并让您专注于数据。它会自动将您对数据的查询转换为 IO 操作。例如:

  • 如果你的数据是double格式的(我相信根据你教授的话是这样),你的read()方法很简单:

    public static double read() {
        return dataInStream.readDouble();
    }
    
  • 如果数据以以下float格式出现:

    public static double read() {
        return (double)dataInStream.readFloat();
    }
    

但同样,请务必查阅您正在使用的设备的规格以了解确切的格式。某些设备可能会以特殊格式向您传递数据,例如:“前 2 个字节是结果值的整数部分,后 2 个字节是小数部分”。作为数据的消费者,您可以遵循其格式。

于 2013-01-27T22:53:14.610 回答