android - 从 Flutter 的方法通道访问 Kotlin 中的参数数据
问题描述
我在颤振和 Kotlin 中设置了一个基本的方法通道。
以下是我的示例数据:
{
"user_dob":"15 November 1997",
"user_description":"Hello there, I am a User!",
"user_gender":"Male",
"user_session":"KKDSH3G9OJKJFIHXLJXUGWIOG9UJKLJ98WHIJ"
}
以下方法通道可以将数据从 Flutter 传递到 Kotlin 端:
var result = await platform.invokeMethod('updateProfile', data);
以下代码捕获 Kotlin 中的数据:
MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
if(call.method == "updateProfile"){
var argData = call.arguments
...
现在,argData
包含我刚刚发送的数据,出现了两个问题:
我如何访问数据
argdata
?例如。我如何从中得到我
user_dob
的argData
?
以下代码是我当前的解决方案。
val userDOB : String = call.argument("user_dob")
但是会抛出以下错误:Kotlin: Type mismatch: inferred type is String? but String was expected
注意:当我将地图数据发送到 MethodChannel 时,它被意外地作为字符串发送。要遵循此方法,请确保在传递数据时实现了 Map 对象。
解决方案
从 Flutter 的方法通道获取方法参数时,传入的数据是一个 json 格式的 String。
您可以简单地调用call.argument
,它会返回一个Nullable字符串。
在您的情况下,您请求了String
Kotlin 中的 which 是Nun-null
String 对象,但call.argument
json 中可能不存在的返回值并且为空。所以你必须得到String?
一个Nullable
字符串。
更新
检查并确保通道能够将数据传递给本机。
扑朔迷离:
static const MethodChannel _channel = const MethodChannel('NAME');
在本机代码中:
val channel = MethodChannel(registrar.messenger(), "NAME");
TL; 博士
在 Kotlin中,对可以为 null 的数据使用Nullable 对象。
val userDOB : String? = call.argument("user_dob")
并与?.
(Null safe)一起使用
推荐阅读
- macos - 我可以检测来宾是否正在使用 OSX 机器吗?
- java - 使用 getConstructor() 检查构造函数不带参数
- c# - 如何检测鼠标是否停止在 Unity 中移动
- java - CSS未在spring boot应用程序中加载
- ruby-on-rails - 无法访问最新版本 GitHub gem 中的功能
- android - 是否可以在 Nativescript 中使用矢量可绘制对象作为图像源?
- javascript - HtmlUnit 执行 Javascript 后如何获取页面
- c# - DrawArc 对圆形有效,但对椭圆无效
- javascript - 在异步调用中使用 Promise 进行递归
- java - hibernate & jpa:具有复合主键的表:自动增量问题