0

私は現在、GraphViewGitGubで開発者jjoe64のを使用していますdoubleが、BT接続スレッドクラスで作成したIをクラスに取得するにはどうすればよいか考えていましたGraphView。これはランダムデータを呼び出す元の関数ですが、BlueToothクラスのシリアルデータが必要です。このリアルタイムグラフの現在の関数は次のとおりです。

private double getRandom() {
    double high = 3;
    double low = 0.5;
    return Math.random() * (high - low) + low;
}

私のBluetoothクラスにはコマンド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

すぐに使用できるソリューションについて十分な情報が提供されていませんが、とにかく試してみます。

まず第一に、それmmInStreamInputStreamまたはそのサブクラスであると思います。のAPIを見てくださいint InputStream.read(byte[] b)

入力ストリームからいくつかのバイトを読み取り、それらをバッファ配列に格納します。実際に読み取られたバイト数は整数として返されます。このメソッドは、入力データが使用可能になるか、ファイルの終わりが検出されるか、例外がスローされるまでブロックします。

これは、メソッドから返されるのは、 fromread()に書き込まれたバイト数だけであることを意味します。それはおそらくあなたがやりたいことではありません。おそらくやりたいことは、このストリームから値だけを読み取ることです。これを行うには、次のことを行う必要があります。buffermmInStream

  • が作成されmmInStreamDataInputStream直後にをラップします。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バイトは小数部分です」などのエキゾチックな形式でデータを渡す場合があります。データの形式に従うのは、データの利用者としてのあなた次第です。

于 2013-01-27T22:53:14.610 に答える