java通过web获取json数据

一般的SDK登录之后都会返回渠道用户唯一标识,token,渠道,然后客户端接收后用这些数据登录游戏,但是九游的登录成功返回的参数只有一个token,用户标识要去服务端去取,然而这个时候还没有与游戏服务端连接,所以只能通过web获取了。本来我是写在unity里面的, 但是感觉不怎么好,还不如写到SDK端直接在SDK的登录成功给unity传输数据的时候直接发给unity。

创建一个runnable去获取json数据,然后通过handler传输接收获取的数据,在handler里面处理数据,进行逻辑操作就好了:

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            StringBuilder json = new StringBuilder();
            try {
                URL oracle = new URL(getAccountIdUrl);
                //yc是URLConnection对象,oracle.openConnection()返回的是URLConnection对象,赋值给yc。
                URLConnection yc = oracle.openConnection();
                //BufferedReader缓冲方式文本读取
                //InputStreamReader是字节流与字符流之间的桥梁,能将字节流输出为字符流,
                //并且能为字节流指定字符集,可输出一个个的字符
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        yc.getInputStream(), "utf-8"));// 防止乱码
                String inputLine = null;
                while ((inputLine = in.readLine()) != null) {
                    json.append(inputLine);
                }
                in.close();
            } catch (Exception e) {
                Log.d(TAG,e.toString());
            }
            Message msg = new Message();
            Bundle data = new Bundle();

            data.putString("data",json.toString());
            msg.setData(data);
            handler.sendMessage(msg);
            Log.d(TAG,"发送"+data.toString());
        }
    };
Handler handler = new Handler(){
        @Override
        public void  handleMessage(Message msg)
        {
            super.handleMessage(msg);
            Bundle data =  msg.getData();
            String val = data.getString("data");
            Log.d(TAG,"jieshou data" + val);

            JSONObject object;
            String accountID  = "";
            int code = 0;
            try {
                object =JSONObject.parseObject(val);
                accountID = object.getString("accountId");
                code = object.getInteger("code");
                jsonObj.put("code",code);
                jsonObj.put("channelUid",accountID);
                if (code==1)
                {
                    Send2Unity(gameObjectName,loginCallback,toResultData(Succed,new Entry("data",jsonObj)));
                }
                else
                {
                    Send2Unity(gameObjectName,loginCallback,toResultData(Fail,new Entry("data",jsonObj)));
                }


            } catch (Exception e) {


                e.printStackTrace();
                jsonObj.put("Exception108",e);
                Send2Unity(gameObjectName,loginCallback,toResultData(Fail,new Entry("data",jsonObj)));
            }

        }
    };

jsonobject我用的com.alibaba.fastjson.JSONObject;,所以方法不太一样。在九游的登录成功回调里面启动线程,处理完数据就会通知给unity了,完毕。

new Thread(runnable).start();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值