“有人住高楼,有人在深沟,有人光万丈,有人一身锈,世人万千种,浮云莫去求,斯人若彩虹,遇上方知有。”

时隔四季,我重新开始了我的文章更新,so do you miss me?

前言

从工作到现在,我是个四年的程序员了,但是觉得自己踩的坑真的是填都填不完。所以决定把我踩的坑,系统性的归纳和记录,所以CSDN,爷回来了。 错了,是干净的爷回来了。

最近开发心得

有困难不要慌,问问同行讲讲逻辑,多交流,虽然不能教你咋写代码,但是可以分享思路给你(比如你android开发问ios或者问后端都一样)在遇到陌生的项目时全局搜索很有用,你可以看看这个对象或者功能,在哪里注册,在哪里引用,在哪里实现。总会有灵感的如果真的遇到了你敢想的事情,不要怕,不要怂,先百度看看,是不是真的有这方面的知识或者技能,站在巨人的肩膀上是ok的砥砺前行,顶峰相见。 面向CV,面向百度。冲鸭

Android导入RN第三方控件给rn使用

1.下载Node.js

Node.js 下载地址 然后一路确定下一步就行 环境变量配置 下载安装完成配置环境后打开命令行界面cmd输入

npm -v

出现如下界面就说明安装好了

2.集成例子react-native-wheel-picker

地址react-native-wheel-picker GitHub地址,然后cmd输入下面的代码导入

npm i @yz1311/react-native-wheel-picker

导入的文件夹,默认C:\Users\自己的用户名\node_modules 导入成功后如下 然后只留android文件夹把react-native-wheel-picker这个文件夹丢到Android项目中 项目的settings.gradle中添加导入 项目中app的build.gradle中添加导入 在react-native-wheel-picker中build.gradle如果有自己引用第三方rn框架就要换成自己的rn框架 在Application中引用Package方法

3.备注

我只有C盘所以node.js没有配置分盘的环境变量至于RN那边如何调用,暂时不会,很抱歉,只分享了如何引用的,rn那边的同事是可以引用的

Android和RN互调方式

public class RNDataMain extends LegoRNJavaModule {

private static final int REQUEST_CODE = 1;

private static Callback mDoneCallback;

private static ReactApplicationContext rnContext;

public RNDataMain(ReactApplicationContext reactApplicationContext){

super(reactApplicationContext);

rnContext=reactApplicationContext;

//1.Activity活动传替参数创建监听

reactApplicationContext.addActivityEventListener(mActivityEventListener);

}

public static void sendEvent(String eventName, String params){

if (rnContext==null) return;

//2.主动给rn传替参数

rnContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName,""+params);

}

//3.上下文异常需主动调用传参方式

public static void addActivityResult ( int requestCode, int resultCode, Intent intent){

try {

if (requestCode == REQUEST_CODE) {

if (mDoneCallback != null) {

if (resultCode == Activity.RESULT_CANCELED) {

WritableMap map = Arguments.createMap();

map.putString("succeed", intent.getExtras().getString("result"));

//4.invoke传参

mDoneCallback.invoke(map);

} else {

WritableMap map = Arguments.createMap();

map.putString("err", intent.getExtras().getString("result"));

mDoneCallback.invoke(map);

}

}

}

}catch (Exception e){

}

}

@NonNull

@Override

public String getName() {

return "RNDataMain";

}

private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener(){

@Override

public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {

try {

if (requestCode == REQUEST_CODE) {

if (mDoneCallback != null) {

if (resultCode == Activity.RESULT_CANCELED) {

WritableMap map = Arguments.createMap();

map.putString("succeed", intent.getExtras().getString("result"));

mDoneCallback.invoke(map);

} else {

WritableMap map = Arguments.createMap();

map.putString("err", intent.getExtras().getString("result"));

mDoneCallback.invoke(map);

}

}

}

}catch (Exception e){

Log.e("",e.toString());

}

}

};

@ReactMethod

public void startScan(final ReadableMap map, final Callback onDone){

mDoneCallback = onDone;

//5.再次链接地址,防止上下文被回收,导致主动传参2无效

rnContext=getReactApplicationContext();

String data= map.hasKey("data") ? map.getString("data") :"";

Intent intent = new Intent(getCurrentActivity(), RNActivity.class);

intent.putExtra("data", data);

getCurrentActivity().startActivityForResult(intent, REQUEST_CODE);

}

}

错误不足

请大佬私信指出。(心里默念,我是没错的)

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: