2

我正在尝试使用以下代码读取特征并获取其值

private byte[] val;

mBluetoothLeService.readCharacteristic(characteristic);// reads it
val=characteristic.getValue();
String s=new String(val);

我的应用程序崩溃并给出错误“应用程序可能在其主线程上做的工作过多。”

我也试过

private String s;
 mBluetoothLeService.readCharacteristic(characteristic);// reads it
    s=characteristic.getStringValue(0);

但错误是一样的

我已经调试了我的代码以检查它是否获得了价值

private String s;
     mBluetoothLeService.readCharacteristic(characteristic);// reads it
        s=characteristic.getStringValue(0);
    system.out.println(s);

它显示正确的值,但将代码作为 Android 应用程序运行。我犯了同样的错误。

4

2 回答 2

5

如果我没记错的话,这可能是因为您在主线程上做了太多工作,您应该在单独的线程中或使用 Runnable 或 AsyncTask 进行繁重的处理。这个 SO question 可能会对您有所帮助。

于 2014-07-19T07:33:04.703 回答
0

当您调用 Read 时,可以从 BluetoothGattCallback 获取字符

BluetoothGattCallback mCallback=new BluetoothGattCallback() {

    public void onCharacteristicRead(BluetoothGatt gatt, 
            BluetoothGattCharacteristic characteristic, int status) {

    };
};
于 2014-11-10T10:04:42.667 回答