Cordova开发安卓app进行Bundle解析

(创建于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();
                        }
                    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值