“有人住高楼,有人在深沟,有人光万丈,有人一身锈,世人万千种,浮云莫去求,斯人若彩虹,遇上方知有。”
时隔四季,我重新开始了我的文章更新,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);
}
}
错误不足
请大佬私信指出。(心里默念,我是没错的)