У меня есть собственный компонент реакции, который общается с 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.
Мой вопрос в том, как мне использовать эти 2 объекта в моем java?
Мне нужна посылка или что-то в этом роде, чтобы java это понимала
@ Джулия, проверь мой ответ .. Это именно то, что тебе нужно.
Вопрос:
How do I use these 2 objects Object1 and Object2 in my java?
Отвечать: Цитируется из здесь:
"The following argument types are supported for methods annotated with @ReactMethod and they directly map to their JavaScript equivalents"
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: Источник
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...
Если вы хотите передать сложные объекты из React-Native в Android, вам следует использовать ReadableMap, который используется в мосте JavaScript и эквивалентен HashMap.
ReadableMap obj1
Затем вы можете передать это в HashMap и легко получить значения
HashMap map = (HashMap) obj1;
String field = map.get("key").toString();
Для конкретных значений, которые вы указали:
Получите data1 как другой HashMap из obj1:
HashMap details = (HashMap) map.get("details");
Прочтите строки из карты деталей:
String detailId = details.get("detailId").toString();
Зачем закидывать на HashMap? Для этого и нужен интерфейс ReadableMap ...
@HedeH ReadableMap реализован для React Native, раньше в Java его не было. Например, если вы собираетесь передать этот объект на другую страницу, вам потребуется еще один импорт из пакета react bridge, чтобы использовать его. Я обычно приводил его к HashMap для использования стандартных служебных объектов Java на каждой странице. Как я уже сказал, это просто соглашение о кодировании, решать вам.
Достаточно справедливо, но вопрос касается React Native .. И у React Native есть свои соглашения ... Вы бы использовали Log.d() при разработке для Android или System.out.println()? конечно Log.d() ....
Эти объекты готовы к использованию и переданы в качестве параметров. Я не мог понять, что вы имеете в виду, говоря, как мне использовать эти объекты.