解决微信安卓SDK获取用户昵称时中文乱码的问题

内测的时候有人反映微信登录时用户昵称是乱码,所以回来调试时在logcat中打印了一下, 发现确实是乱码,我一开始以为是编码问题,然后几种常用的中文编码方式我都试了下,发现还是乱码,网上大概地搜了一下,发现直接在获取网络输入流时就进行转码可以解决这个问题。

但我们原来都是用volley来发网络请求的,要修改的话就需要在初始化RequestQueue时提供自己实现的HttpStack,虽然可以直接复制并稍微修改一下默认的HurlStack的代码,但是这样影响太大而且太麻烦,所以直接改用原生的URLConnection+AsyncStack发请求

代码修改如下

    static class GetUserInfoTask extends AsyncTask<Object, Void, String> {

        private OnGetUserInfoListener mListener;
        private String mUrl;

        public GetUserInfoTask(OnGetUserInfoListener listener, String getUserInfoUrl) {
            mListener = listener;
            mUrl = getUserInfoUrl;
        }

        @Override
        protected String doInBackground(Object... params) {
            HttpURLConnection conn = null;
            BufferedReader in = null;
            StringBuilder result = new StringBuilder();

            try {
                conn = (HttpURLConnection)new URL(mUrl).openConnection();
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String buf;
                while ((buf = in.readLine()) != null)
                    result.append(buf);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (conn != null)
                    conn.disconnect();
                FileUtils.close(in);
            }
            return result.toString();
        }

        @Override
        protected void onPostExecute(String s) {
            Log.d(TAG, "onPostExecute " + s);
            mListener.onGetUserInfo(s);
        }
    }
public interface OnGetUserInfoListener {

    void onGetUserInfo(String userInfo); //json字符串

    void onNetError();
}
获取用户昵称的代码改成下面的

    private void getUserInfo(String accessToken, String openId) {
        String url = "https://api.weixin.qq.com/sns/userinfo?" +
                "access_token=" + accessToken + "&openid=" + openId;
        mGetUserInfoTask = new GetUserInfoTask(this, url); //this代表WXEntryActivity.this
        mGetUserInfoTask.execute();
    }
然后WXEntryActivity实现OnGetUserInfoListener接口,具体的逻辑就是应用相关的了

不过话说回来微信的SDK做的真的是水



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值