将 java List<Double> 传递给 dart List<double> 时出错
Posted
技术标签:
【中文标题】将 java List<Double> 传递给 dart List<double> 时出错【英文标题】:Error Passing java List<Double> to dart List<double> 【发布时间】:2019-02-05 14:36:47 【问题描述】:好的,我完全按照这个例子:https://flutter.io/platform-channels/
并尝试像这样修改它:
List<double> points;
try
//Changed This
/*final String result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'Battery level at $result % .'; */
//To This
final List<double> result = await platform.invokeMethod('getBatteryLevel');
points = result;
print("Message 2");
然后在MainActivity.java中,把getBatteryLevel函数改成这样:
private List<Double> getBatteryLevel()
List<Double> list = Arrays.asList(1.38, 2.56, 4.3);
return list;
最后将 MethodCall 更改为:
List<Double> batteryLevel = getBatteryLevel();
Log.i("errors", "Message");
result.success(batteryLevel);
但是当我运行代码时,Message 1 会打印出来,但 Message 2 不会。 我注意到使用像 Strings 和 Integer 这样的简单类型而不是 List 有效。我也尝试用java中的数组替换List,但还是不行。问题是我没有得到任何错误任何堆栈跟踪,任何东西。我的想法是,在 dart 中,他正在等待一些永远不会出现的东西,因为 Dart 和 Java 中的双打列表不一样。但这只是我想的一件事。会不会是问题?我该如何解决?
【问题讨论】:
【参考方案1】:尝试在没有<double>
的情况下接收List
,因为Dart 假定List
中的类型是动态的而不是原始的,所以当您尝试将List<dynamic>
解析为List<double>
时会出错。
final List result = await platform.invokeMethod('getBatteryLevel');
应该可以。
不要忘记在 MainActivity 中包含您的导入,看起来您正在使用 Arrays
和 List
类,然后导入以下类:
import java.util.Arrays;
import java.util.List;
【讨论】:
以上是关于将 java List<Double> 传递给 dart List<double> 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 Parcelable 读取 List<List<List<Double>>