在使用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原生交互的更多相关文章

  1. (五)react-native开发系列之Android原生交互

    react-native可以做web与原生的交互,这是使用react-native开发项目的主要目的之一,也是主要优势,用rn而不用原生交互则毫无价值,这篇文章用来记录在项目中rn的原生交互使用过程. ...

  2. RN与android原生开发混合后的环境报错问题

    RN与android原生开发混合后的环境报错问题 需要先安装nodejs$ yarn --version1.12.1更新当前版本yarn upgrade --latest安装 | Yarnhttps: ...

  3. 像写Flutter一样开发Android原生应用

    要问到Flutter和Android原生App,在开发是有何区别,编程方式是绕不开的话题.Flutter采用声明式编程,Android原生开发则采用命令式编程. 声明式编程 VS. 命令式编程 我们首 ...

  4. js与android原生交互

    package com.liuhao.mysecond; import androidx.annotation.RequiresApi;import androidx.appcompat.app.Ap ...

  5. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  6. Android原生跳转React不同页面(undefined is not an object)

    继续上篇文章的demo,由于现在的项目是原生的,打算用部分页面试下react native,那么问题来了:react貌似只有一个入口 index.android.js,那么在不同的原生页面需要跳转到不 ...

  7. Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。

    当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID:  大概就是点击H5界面跳转到Androi ...

  8. React-Native开发之原生模块封装(Android)升级版

     本文主题:如何实现原生代码的复用,即如何将原生模块封装. (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/52862 ...

  9. iOS原生混合RN开发最佳实践

    iOS原生混合RN开发详解 做过原生iOS开发或者Android开发的同学们肯定也都了解Hybrid,有一些Hybrid的开发经验,目前我们企业开发中运用最广泛的Hybrid App技术就是原生与H5 ...

随机推荐

  1. 静态SRAM芯片工作原理

    下面谈谈当存储字节的过程是怎样的:下面的示意图显示的也仅仅是最简单状态下的情况,当内存条上仅剩一个RAM芯片的情况.对于X86处理器,它通过地址总线发出一个具有22位二进制数字的地址编码--其中11位 ...

  2. vim配置markdown预览

    注:系统为Centos7,安装了gnome桌面环境. 我的vim装了vimplus工具包,看代码一等一的方便,但是看md的时候还是有些不快乐.于是想找个插件实现markdown的预览. 尝试了几个vi ...

  3. echarts多条折线图

    折线图单只比较好配置,但是多只的话,楼主整整难了一下午才搞出来,下面分享下啦 var myChart = echarts.init(document.getElementById('series-ch ...

  4. 第一天,初学Markdown

    Markdown学习 二级标题 三级标题 字体 hello,world hello,world hello,world hello,world 引用 飞冲 分割线 图片 超链接 跳转到安徽科技学院 列 ...

  5. RAID | 故障处理

    RAID | 故障处理 Unconfigured(good), Spun Up 背景:磁盘替换后在导入外部配置时提示失败,磁盘状态如题. MegaCli -pdgetmissing -a0查看miss ...

  6. 手把手教你如何构建Vue前端组件库

    在前端开发中可能会遇到将相同的功能模板集合成一个组件,供他人调用,这样可以减少重复造轮子,也可以节约人力.财力,更能够提高代码的可维护度:下面将通过详细的步骤教你如何构建一个Vue前端组件. 1.在本 ...

  7. 【55】目标检测之IOU交并比

    交并比(Intersection over union) 你如何判断对象检测算法运作良好呢?在本笔记中,你将了解到并交比函数,可以用来评价对象检测算法.在下一个笔记中,我们用它来插入一个分量来进一步改 ...

  8. 剑指offer-面试题53_1-在排序数组中查找数字-二分查找

    /* 题目: 统计一个数字在排序数组中出现的次数. */ /* 思路: 1.从前往后遍历,时间复杂度O(n). 2.二分查找到目标数字target,向前向后遍历,时间复杂度O(n). 3.利用二分法, ...

  9. 洛谷题解 P1592 【互质】

    原题传送门 题目描述 输入两个正整数n和k,求与n互质的第k个正整数. 输入格式 仅一行,为两个正整数n(≤10^6)和k(≤10^8). 输出格式 一个正整数,表示与n互质的第k个正整数. 输入输出 ...

  10. java简单验证码生成程序

    下面的函数,返回的字符串就是所需验证码 public String id(){ Random ra =new Random(); st=""; String [] w= {&quo ...