博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReactNative-JS 调用原生方法实例代码(转载)
阅读量:5298 次
发布时间:2019-06-14

本文共 3459 字,大约阅读时间需要 11 分钟。

第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule

package com.mixture;
 
import android.content.Context;
import android.widget.Toast;
 
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
 
public class MyNativeModule extends ReactContextBaseJavaModule {
 
  
public static final String REACTCLASSNAME =
"MyNativeModule"
;
  
private Context mContext;
 
  
public MyNativeModule(ReactApplicationContext reactContext) {
    
super
(reactContext);
    
mContext = reactContext;
  
}
 
  
@Override
  
public String getName() {
    
return
REACTCLASSNAME;
  
}
 
  
/**
   
* 必须添加反射注解不然会报错
   
* 这个方法就是ReactNative将要调用的方法,会通过此类名字调用
   
* @param msg
   
*/
  
@ReactMethod
  
public void callNativeMethod(String msg) {
    
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
  
}
}
 
第二步创建一个React包管理器实现ReactPackage将每个模块放到模块集合中
 
package
com.mixture;
 
import
com.facebook.react.ReactPackage;
import
com.facebook.react.bridge.JavaScriptModule;
import
com.facebook.react.bridge.NativeModule;
import
com.facebook.react.bridge.ReactApplicationContext;
import
com.facebook.react.uimanager.ViewManager;
 
import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.List;
 
/**
 
* Created by Administrator on 2016/9/22.
 
*/
 
public
class
MyReactPackage
implements
ReactPackage {
 
  
@Override
  
public
List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    
List<NativeModule> modules =
new
ArrayList<>();
    
modules.add(
new
MyNativeModule(reactContext));
    
return
modules;
  
}
 
  
@Override
  
public
List<Class<?
extends
JavaScriptModule>> createJSModules() {
    
return
Collections.emptyList();
  
}
 
  
@Override
  
public
List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    
return
Collections.emptyList();
  
}
}

第三步在应用入口注册这个React包管理器

package
com.mixture;
 
import
android.app.Application;
import
android.util.Log;
 
import
com.facebook.react.ReactApplication;
import
com.facebook.react.ReactInstanceManager;
import
com.facebook.react.ReactNativeHost;
import
com.facebook.react.ReactPackage;
import
com.facebook.react.shell.MainReactPackage;
 
import
java.util.Arrays;
import
java.util.List;
 
public
class
MainApplication
extends
Application
implements
ReactApplication {
 
  
private
final
ReactNativeHost mReactNativeHost =
new
ReactNativeHost(
this
) {
    
@Override
    
protected
boolean
getUseDeveloperSupport() {
      
return
BuildConfig.DEBUG;
    
}
 
    
@Override
    
protected
List<ReactPackage> getPackages() {
      
return
Arrays.<ReactPackage>asList(
          
new
MainReactPackage(),
          
//在应用中注册这个包管理器
          
new
MyReactPackage()
      
);
    
}
  
};
 
  
@Override
  
public
ReactNativeHost getReactNativeHost() {
    
return
mReactNativeHost;
  
}
}

第四步就是在ReactNative中调用react-native中提供一个NativeModules通过模块名字和方法名字进行调用

/**
 
* Sample React Native App
 
*
 
* @flow
 
*/
 
import
React, {Component} from
'react'
;
import
{
  
AppRegistry,
  
StyleSheet,
  
Text,
  
View,
  
NativeModules,
} from
'react-native'
;
 
class
Mixture
extends
Component {
  
render() {
    
return
(
      
<View style={styles.container}>
        
<Text style={styles.instructions} onPress={() =>
this
.onClick()}>
          
调用用原生方法
        
</Text>
      
</View>
    
);
  
}
 
  
/**
   
* 调用原生方法
   
*/
  
onClick() {
    
NativeModules.MyNativeModule.callNativeMethod(
'成功调用原生方法'
);
  
}
}
const
styles = StyleSheet.create({
  
container: {
    
flex:
1
,
    
justifyContent:
'center'
,
    
alignItems:
'center'
,
    
backgroundColor:
'#F5FCFF'
,
  
},
  
instructions: {
    
textAlign:
'center'
,
    
color:
'#333333'
,
    
marginBottom:
5
,
  
},
});
 
AppRegistry.registerComponent(
'Mixture'
, () => Mixture);

 

转载于:https://www.cnblogs.com/candyzhmm/p/8975015.html

你可能感兴趣的文章
Air Max 1 Men's Shoe Black/Team Red [NIKE-NO.12030]
查看>>
16_Python变量作用域_Python编程之路
查看>>
js 数组,字符串,json互相转换(在select实现多个输入的时候与后台交互常使用)...
查看>>
js index of()用法
查看>>
XSS原理及防范
查看>>
WPF中Image显示本地图片
查看>>
SVN版本管理
查看>>
哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
查看>>
SQL 操作结果集 -并集、差集、交集、结果集排序
查看>>
flume监控
查看>>
无法重启ssh
查看>>
Bugly热更新——初探
查看>>
ios12--简易购物车
查看>>
go17---并发
查看>>
守护线程
查看>>
VC++中使用MFC通过ADO连接数据库
查看>>
JavaScript验证注册信息
查看>>
延时加载图片
查看>>
C++库(Thrift)
查看>>
Hadoop综合大作业
查看>>