android - 使用自定义对象在 React native 和 android 之间进行 React Native 通信
问题描述
我有一个像这样与 Android 通信的本机组件 -
我的 React Native 代码——
const myModule = NativeModules.MyProcessor;
myModule.processData(obj1, obj2);
我的Android代码MyProcessor.java
是-
@ReactMethod
public void processData(final Object1 obj1, final Objet2 obj2) {
//Do something here
}
我的对象数据看起来像 -
"data1": {
"id": "1",
"name": "john",
"key": "xxxxxxxx"
},
"details": {
"detailId": "2",
"detailName": "peter",
"counter": 1
}
我得到了 2 个对象 data1 和详细信息,我需要这两个对象和 detailId。
我的问题是如何在我的 java 中使用这两个对象?
解决方案
问题:
如何在我的 java 中使用这两个对象 Object1 和 Object2?
答:引用自这里:
“使用 @ReactMethod 注释的方法支持以下参数类型,它们直接映射到它们的 JavaScript 等效项”
Boolean -> Bool
Integer -> Number
Double -> Number
Float -> Number
String -> String
Callback -> function
ReadableMap -> Object
ReadableArray -> Array
React Native 正在将 javascript 对象转换为ReadableMap
.
因此,您应该实现这样的方法,而不是期望Object
在本机模块中出现:
@ReactMethod
public void processData(final ReadableMap obj1, final ReadableMap obj2) {
// Parse the ReadableMap using the available interface methods
}
这些是ReadableMap
接口中可用的方法:Source
public interface ReadableMap {
boolean hasKey(String name);
boolean isNull(String name);
boolean getBoolean(String name);
double getDouble(String name);
int getInt(String name);
String getString(String name);
ReadableArray getArray(String name);
ReadableMap getMap(String name);
Dynamic getDynamic(String name);
ReadableType getType(String name);
ReadableMapKeySetIterator keySetIterator();
HashMap<String, Object> toHashMap();
}
更新
按照您发布的示例对象,您可以像这样解析数据:
ReadableMap data1 = obj1.getMap("data1");
String id = data1.getString("id");
String name = data1.getString("name");
// And so on...
ReadableMap details = obj1.getMap("details");
String detailId = details.getString("detailId");
int counter = details.getInt("counter");
// And so on...
推荐阅读
- javascript - 如何实现服务器端less主题?
- bert-language-model - 如何在微调阶段使用 BERT 模型进行 MLM
- c# - 在 Windows 应用程序表单的文本框中打印数组时出错
- php - PHP:试图在数据库中插入日期
- python-3.x - 我在这里缺少什么,使用 ImageFolder 获取完整文件夹名称作为 MNIST 双数据集图像的标签?
- vba - 有没有办法改变 VBA 用户窗体标签中字符串部分的字体颜色?
- swift - Ubuntu 16.04 上 iOS NEVPNManager 和 StrongSwan 之间的 VPN 连接
- .net - .Net Core 应用程序内存问题
- docker - 通过端口 443 和 apache 访问 mosquitto
- azure - 如何在 Azure 应用程序洞察中查找实例区域