(创建于2018/2/9)
最近在一个混合开发的项目中遇到的一种数据解析方式,使用Cordova进行原生和js的通信,原生接收js消息的方式
final BroadcastReceiver popReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
}
LocalBroadcastManager.getInstance(this).registerReceiver(popReceiver, new IntentFilter(Constants.LETTER_LIST));
所以收到js消息之后,都是从intent中拿,一般都是这样
Bundle extras = intent.getExtras();
然后从bundle中获取数据,如果是字符串,直接解析即可
String view = extras.getString(Constants.VIEW);
较复杂的数据,比如一个对象,一个集合j,就需要用到今天要说的方式来解析了 如下:
Bundle[{content=Bundle[{0=Bundle[{messages=Bundle[{0=Bundle[{type=us, content=啦咯啦咯啦咯, created_at=2018-02-09 16:55:06, headimgurl=https://naneng-user.oss-cn-shanghai.aliyuncs.com
/default_user_head.jpg}], 1=Bundle[{type=us, content=啦咯啦咯啦咯吐了老K, created_at=2018-02-09
16:55:11, headimgurl=https://naneng-user.oss-cn-shanghai.aliyuncs.com/default_user_head.jpg}],
2=Bundle[{type=us, content=T恤咯OK, created_at=2018-02-09 16:55:16, headimgurl=https://naneng-
user.oss-cn-shanghai.aliyuncs.com/default_user_head.jpg}]}], id=116, nickname=17621421360}]}]}]
解析方法:
//可以看到最外层是一个bundle,所以获取到这个bundle,这里的bundle即可以是对象也可以是集合,看括号的形式[]表示对象,{}表示集合,所以最外层bundle是对象
Bundle extras = intent.getExtras();
if (extras != null){
try {
JSONObject jsonObject = new JSONObject();
//以content为key的这个bundle是一个集合,可以看到,里边有三个元素,0,1,2分别为key
Bundle content = extras.getBundle("content");
for (int i=0;i<content.size();i++){
//0,1,2分别为key
Bundle bundle = content.getBundle(i+"");
Bundle messages = bundle.getBundle("messages");
JSONArray messageArray = new JSONArray();
for (int j=0;j<messages.size();j++){
Bundle data = messages.getBundle(j + "");
String type = data.getString("type");
String dataContent = data.getString("content");
String create_at = data.getString("created_at");
String headimgurl = data.getString("headimgurl");
JSONObject messageObj = new JSONObject();
messageObj.put("type",type);
messageObj.put("content",dataContent);
messageObj.put("created_at",create_at);
messageObj.put("headimgurl",headimgurl);
messageArray.put(j,messageObj);
}
int id = bundle.getInt("id");
String nickname = bundle.getString("nickname");
JSONObject contentObj = new JSONObject();
contentObj.put("messages",messageArray);
contentObj.put("id",id);
contentObj.put("nickname",nickname);
jsonObject.put("content",contentObj);
}
} catch (JSONException e) {
e.printStackTrace();
}
}