RN开发-Android原生交互
在使用RN开发过程中,难免有些原生功能需要要自己来实现,下面总结一下在使用RN与原生开发交互。
1、在原生代码中定义实现类
1.1 首先继承 ReactContextBaseJaveModule抽象类
public class SomeModule extends ReactContextBaseJavaModule{}
1.2 实现构造方法
public SomeModule(ReactApplicationContext context){
super(context);
}
1.3 实现 getName() 方法,并返回一个字符串
@Override
public String getName(){
return "SomeModule"; //返回值将在RN代码中使用
}
1.4 实现功能方法,使用注解@ReactMethod修饰(使用修饰ReactMethod的方法,可以在RN中被调用)
@ReactMethod
public void callbackMethod(Object paramsFromJS,Callback ok,Callback error){
//... do something , result = true
if(result){
ok.invoke("params");
}else{
error.invoke("error");
}
}
@ReactMethod
public void promiseMethod(Object paramsFromJS,Promise promise){
// ... do something, result = true
if(result){
promise.resolve("params");
}else{
promise.reject("error");
}
}
2、原生注册模块
2.1 注册模块
实现ReactPackage接口
public class SomeReactPackage implements ReactPackage{
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext){
return Collections.<NativeModule>singletonList(new SomeModule(reactContext));
}
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
}
2.2 添加模块
在MainPackage类的getPackages()方法中添加模块
public List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(new MainReactPackage(),new SomeReactPackage());
}
3、RN中JS代码
3.1 首先导入库
import { NativeModules } from 'react-native'
3.2 调用原生方法
3.2.1回调方法
NativeModules.SomeModule.callbackMethod('params',(ok)=>{},(error)=>{});
3.2.2 Promise方法
NativeModules.SomeModule.promiseMethod('params').then((ok)=>{}).catch((error)=>{});
3.2.3 说明
NativeModules : 不用解释,react-native提供的类库
SomeModule : 原生代码中,getName()方法返回字符串
callbackMethod() / promiseMethod() : 原生代码中,使用@ReactMethod修饰的方法
(ok)=>{} : 成功回调方法
(error)=>{} : 失败回调方法
至此,RN与原生混合开发最基本的流程已经OK 。
RN开发-Android原生交互的更多相关文章
- (五)react-native开发系列之Android原生交互
react-native可以做web与原生的交互,这是使用react-native开发项目的主要目的之一,也是主要优势,用rn而不用原生交互则毫无价值,这篇文章用来记录在项目中rn的原生交互使用过程. ...
- RN与android原生开发混合后的环境报错问题
RN与android原生开发混合后的环境报错问题 需要先安装nodejs$ yarn --version1.12.1更新当前版本yarn upgrade --latest安装 | Yarnhttps: ...
- 像写Flutter一样开发Android原生应用
要问到Flutter和Android原生App,在开发是有何区别,编程方式是绕不开的话题.Flutter采用声明式编程,Android原生开发则采用命令式编程. 声明式编程 VS. 命令式编程 我们首 ...
- js与android原生交互
package com.liuhao.mysecond; import androidx.annotation.RequiresApi;import androidx.appcompat.app.Ap ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- Android原生跳转React不同页面(undefined is not an object)
继续上篇文章的demo,由于现在的项目是原生的,打算用部分页面试下react native,那么问题来了:react貌似只有一个入口 index.android.js,那么在不同的原生页面需要跳转到不 ...
- Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。
当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID: 大概就是点击H5界面跳转到Androi ...
- React-Native开发之原生模块封装(Android)升级版
本文主题:如何实现原生代码的复用,即如何将原生模块封装. (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/52862 ...
- iOS原生混合RN开发最佳实践
iOS原生混合RN开发详解 做过原生iOS开发或者Android开发的同学们肯定也都了解Hybrid,有一些Hybrid的开发经验,目前我们企业开发中运用最广泛的Hybrid App技术就是原生与H5 ...
随机推荐
- MySQL锁与事务隔离级别
一.概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.IO等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并发访 ...
- 苹果Mac电脑永久路由的添加 & Mac 校园网连接教程
学校校园网面向全校师生开放,无奈Windows用户基数大,学校只为Windows平台制作了内网连接工具,Mac平台资源较少,本人查阅相关资料后,总结整理出以下步骤,方便本校学生连接校园网.有永久路由添 ...
- 8.python内置模块之random模块简介
Python中的random模块用于生成随机数. 常用的7个函数: 1.random.random():返回一个[0,1)之间的随机浮点值(双精度) 2.random.uniform(a,b):返回[ ...
- IDEA 代码量统计(Statistic)
IDEA 代码量统计(Statistic) 1.1 前言 项目到了一定阶段,都会想要看看项目的代码量情况,这里主要使用插件Statistic进行代码统计查看. 1.2 安装插件步骤 找到插件市场入口并 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(2)
Linux 系统定制原理 虚拟根目录 我们的目标是为了完成目标系统(也就是我们要做的系统),他是一个可以独立运行的系统,不依赖雨主系统和临时系统,根据 Linux 系统的特点它需要存放在根目录下面,但 ...
- composer封装dd函数
1.安装composer,本人用的phpstudy,打开php扩展php_openssl 2.切换到www目录下 cmd 命令 composer 第一个就是我们要找的 3.运行composer req ...
- 吴裕雄--天生自然 PYTHON数据分析:所有美国股票和etf的历史日价格和成交量分析
# This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...
- 【感知机模型】手写代码训练 / 使用sklearn的Perceptron模块训练
读取原始数据 import pandas as pd import numpy as np in_data = pd.read_table('./origin-data/perceptron_15.d ...
- PhpStorm+Xdebug配置单步调试PHP
(一)php安装xdebug扩展,PHPStorm+XDebug单步调试 (二)PHPStorm配置XDebug (三)PHPStorm使用XDebug调试 (四)PhpStorm+Xdebug配置单 ...
- 剑指offer-面试题22-链表中倒数第k个节点-双指针
/* 题目: 链表中倒数第k个节点 */ /* 思路: 考虑边界条件:链表为空,k值超过链表长度. 双指针: q指针指向第k个节点,p指针指向第1个节点. q指针指向最后一个节点,p指针指向倒数第k个 ...