Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React native中的ReadableMap接口如何将JS转换为JAVA?_Javascript_Java_Android_React Native - Fatal编程技术网

Javascript React native中的ReadableMap接口如何将JS转换为JAVA?

Javascript React native中的ReadableMap接口如何将JS转换为JAVA?,javascript,java,android,react-native,Javascript,Java,Android,React Native,我试图理解如何正确地将选项从react native的js端传递到java端 react本机网桥用于转换,但作为JavaNoob,我无法理解这是如何工作的 更具体地说,我不明白: 实际转换是如何工作的 如何判断下游Java代码需要什么类型/格式 如何正确使用ReadableMap来实现这一点 一般来说,我想知道这是如何工作的,但我将给出我正在查看的具体示例,以提供一些上下文 react本机包公开日期时间选择器 JS端有一个showTimePicker方法: showTimePicker(d

我试图理解如何正确地将选项从react native的js端传递到java端

react本机网桥用于转换,但作为JavaNoob,我无法理解这是如何工作的

更具体地说,我不明白:

  • 实际转换是如何工作的
  • 如何判断下游Java代码需要什么类型/格式
  • 如何正确使用ReadableMap来实现这一点
一般来说,我想知道这是如何工作的,但我将给出我正在查看的具体示例,以提供一些上下文


react本机包公开日期时间选择器

JS端有一个showTimePicker方法:

showTimePicker(date, callback) {
    date = date || new Date();
    console.log(this.props);
    debugger
    var options = {
        ...this.props,
        hour:date.getHours(),
        minute:date.getMinutes()
    };
    RCTDateTimePicker.showTimePicker(options, function (hour, minute) {
        date.setHours(hour);
        date.setMinutes(minute);
        callback(date);
    });
}
RCTDateTimePicker.showTimePicker
在本机端桥接到Java:

@ReactMethod
public void showTimePicker(ReadableMap options, Callback callback) {
    DialogFragment timePicker = new TimePicker(options, callback);
    timePicker.show(activity.getFragmentManager(), "timePicker");
}
哪个叫

public TimePicker(ReadableMap options, Callback callback) {
    final Calendar c = Calendar.getInstance();
    this.callback = callback;
    hour = options.hasKey("hour") ? options.getInt("hour") : c.get(Calendar.HOUR_OF_DAY);
    minute = options.hasKey("minute") ? options.getInt("minute") : c.get(Calendar.MINUTE);
}
它创建了一个Android实例。我的目标是将计时器选择器的样式从手表更改为旋转器

有一个可设置的XML属性
android:timePickerMode=“spinner”
,但我认为我不能通过react native传递XML属性,可以吗

我在评论中也找到了一个建议,可以传递给大家,但我不明白怎么做。

首先,请参阅Android本机模块的React本机文档中的列表

参数类型

方法支持以下参数类型 使用@ReactMethod进行注释,并直接映射到JavaScript 等价物

  • 布尔->布尔
  • 整数->数字
  • 双->数字
  • 浮动->数字
  • 字符串->字符串
  • 回调->函数
  • ReadableMap->Object
  • ReadableArray->Array
因此,您可以通过更新JS端传递以包含它的
选项,将
timePickerMode
的额外字段作为字符串传递

var options = {
    ...this.props,
    hour:date.getHours(),
    minute:date.getMinutes(),
    timePickerMode:"spinner"
};
然后从自定义
时间选择器中的ReadableMap中获取该值

String timePickerMode = options.hasKey("timePickerMode") ?
        options.getString("timePickerMode") : defaultTimePickerMode;
现在您有了要设置的值。不幸的是,
timePickerMode
似乎不能通过编程进行设置。询问如何做,@alanv(其个人资料表明他们是谷歌的软件工程师)表示在运行时不可能这样做