无法使用方法通道将 Uint8List 从 Flutter 发送到 Android[Java]
Trouble sending Uint8List from Flutter to Android[Java] using method channels
我在 Flutter 上设置了一个方法通道,用于将 Uint8List 发送到 Android[Java]。 Android 正在接收数据,但字节数似乎在 127 处换行。
例如:如果我从 flutter 中发送 [254, 100, 32],它在 Android 中显示为 [-2, 100, 32]。
基本上,列表中任何超过 127 的值都会被转换为负值。
以下是我在 Fluter 端设置方法通道的方式:
static const MethodChannel platform = MethodChannel(SEND_SERIAL_MESSAGE_TO_ANDROID);
Future<void> sendMessageToAndroid(List<int> message) async {
final bool result = await platform.invokeMethod('parseMessage', message);
}
这就是我在 Android 端收到它的方式
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("parseMessage")) {
byte[] message = call.arguments();
parseMessage(message);
} else {
result.notImplemented();
}
}
);
}
private void parseMessage(byte[] message){
Log.i(LOG_TAG, message.toString());
}
问题:如何阻止 Uint8List 中超过 127 的值在 Java 中转换为负值?
如果您需要查看我的更多代码,请告诉我。
在我开始解释发生了什么之前,让我先用 dart 向您展示一些东西
Uint8List li = Uint8List.fromList([-2, 100, 32]);
li.cast<int>();
print(li); //prints [254, 100, 32]
那为什么-2变成了正254呢?简短的解释是飞镖期望 Uint8List 中的字节是无符号值 所以它打印正值 254 但它们仍然只是字节,
相反,在 java 中,默认值是 有符号字节 ,它不关心它如何打印字节,因为它们仍然是字节,所以我可以告诉你很高兴你的代码没有问题,你试图通过打印字节列表来查看字节值的实际问题,
另一个来源:
,
我在 Flutter 上设置了一个方法通道,用于将 Uint8List 发送到 Android[Java]。 Android 正在接收数据,但字节数似乎在 127 处换行。
例如:如果我从 flutter 中发送 [254, 100, 32],它在 Android 中显示为 [-2, 100, 32]。
基本上,列表中任何超过 127 的值都会被转换为负值。
以下是我在 Fluter 端设置方法通道的方式:
static const MethodChannel platform = MethodChannel(SEND_SERIAL_MESSAGE_TO_ANDROID);
Future<void> sendMessageToAndroid(List<int> message) async {
final bool result = await platform.invokeMethod('parseMessage', message);
}
这就是我在 Android 端收到它的方式
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("parseMessage")) {
byte[] message = call.arguments();
parseMessage(message);
} else {
result.notImplemented();
}
}
);
}
private void parseMessage(byte[] message){
Log.i(LOG_TAG, message.toString());
}
问题:如何阻止 Uint8List 中超过 127 的值在 Java 中转换为负值?
如果您需要查看我的更多代码,请告诉我。
在我开始解释发生了什么之前,让我先用 dart 向您展示一些东西
Uint8List li = Uint8List.fromList([-2, 100, 32]);
li.cast<int>();
print(li); //prints [254, 100, 32]
那为什么-2变成了正254呢?简短的解释是飞镖期望 Uint8List 中的字节是无符号值 所以它打印正值 254 但它们仍然只是字节,
相反,在 java 中,默认值是 有符号字节 ,它不关心它如何打印字节,因为它们仍然是字节,所以我可以告诉你很高兴你的代码没有问题,你试图通过打印字节列表来查看字节值的实际问题, 另一个来源: ,