react-native调用Native:回调(Android)
在react-native中可以通过在java层自定义 Callback
public class StoreModule extends ReactContextBaseJavaModule { @Override public String getName() { return "StoreModule"; } } 指定其名称为StoreModule。 @ReactMethod public void addUser(String userName,String password,Callback successCallback,Callback errorCallback) { try { if (TextUtils.isEmpty(userName)) { errorCallback.invoke("user name is empty"); return; } if (TextUtils.isEmpty(password)) { errorCallback.invoke("password is empty"); return; } preferences.edit().putString(USER_NAME,userName).commit(); preferences.edit().putString(PASSWORD,password).commit(); successCallback.invoke("add user success"); } catch (Exception e) { e.printStackTrace(); errorCallback.invoke(e.getMessage()); } } 现在我们有了一个带有 var {NativeModules}=require('react-native'); var storeModule=NativeModules.StoreModule; storeModule.addUser("jjz","123456",(msg)=>{ alert(msg); },(errorMsg)=>{ alert(errorMsg) }); 这里的方法回调方法我们都是使用的匿名函数,在JavaScript调用Java之后,处理结果会以 PromisePromise是 @ReactMethod public void login(String userName,Promise promise) { String storeUserName = preferences.getString(USER_NAME,""); String storePassword = preferences.getString(PASSWORD,""); if (!equalsString(userName,storeUserName)) { promise.reject("0","user name is wrong"); return; } if (!equalsString(password,storePassword)) { promise.reject("1","password is wrong"); return; } WritableMap map = Arguments.createMap(); map.putDouble("user_id",1); promise.resolve(map); } 这里的 storeModule.login('jjz','123456').then((map)=>{ alert(map['user_id']); },(code,message)=>{ alert(message); }) 使用Promise比使用 代码地址:https://github.com/jjz/react-native/tree/master/RNJava (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |