官方提供了这8种参数类型进行原生与ReactNative之间的转换,基本类型的参数传递很简单,利用官方重新定义的CallBack接口的invoke方法可以直接进行传递,但是集合与数组却没有明确的示例,导致原生端传递过去的JSON数组,js端必须要JSON.parse才可以认出,这很不爽。
观察着8种参数类型其中有ReadableMap 和 ReadableArray类型,对应JavaScript的Object和Array。这个很重要!!!
其对应接口WritableMap和WritableArray接口,以及实现了他们的WritableNativeMap和WritableNativeArray,
(也可以通过 Arguments.createMap()
和 Arguments.createArray()
)来获取对应的对象。
Boolean -> Bool
Integer -> Number
Double -> Number
Float -> Number
String -> String
Callback -> function
ReadableMap -> Object
ReadableArray -> Array
1.如果传递对象:
@ReactMethod
public void getUserInfo(Callback callback){
WritableMap map = Arguments.createMap();
map.putString("islogin",MainApplication.getApplication().isLogin()+"");
map.putString("nick_name", getApplication().getNickname());
map.putString("user_name", getApplication().getUsername());
map.putString("avatar_url", getApplication().getTouxiang());
map.putString("access_token",getApplication().getAccess_token());
map.putString("uid",getApplication().getUid()+"");
map.putString("gender_str", getApplication().getSex());
// promise.resolve(map);
callback.invoke(map);
}
2.如果传递json数组:
@ReactMethod
public void getAllGameList(Callback callback){
ArrayList<Game> games = MainApplication.getApplication().getGames();
WritableArray arrays = Arguments.createArray();
for (Game game:games){
WritableMap map = Arguments.createMap();
map.putString("name",game.name);
map.putString("thumbnail_url",game.thumbnail_url);
.....
arrays.pushMap(map);
}
callback.invoke(arrays);
}
网友评论