将 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】:

尝试在没有&lt;double&gt; 的情况下接收List,因为Dart 假定List 中的类型是动态的而不是原始的,所以当您尝试将List&lt;dynamic&gt; 解析为List&lt;double&gt; 时会出错。

 final List result = await platform.invokeMethod('getBatteryLevel');

应该可以。

不要忘记在 MainActivity 中包含您的导入,看起来您正在使用 ArraysList 类,然后导入以下类:

import java.util.Arrays;
import java.util.List;

【讨论】:

以上是关于将 java List<Double> 传递给 dart List<double> 时出错的主要内容,如果未能解决你的问题,请参考以下文章

java中arrylist怎么存储double

java 将Object转成List

如何在 Android 中使用 Parcelable 读取 List<List<List<Double>>

在 List<List<double[]>> 中合并一些 List<double[]>

将字典转换为 List<KeyValuePair>

java数组按照相同的个数分组的实现,求大神!