Android QQ第三方登录(二)
2015-08-13 11:48
381 查看
这个拖拉两天,真是不好意思!接 android QQ第三方登录(一) 获取登录用户名信息,这边先抱怨一下,官方API有点坑Constants源码类下就是找不到GRAPH_SIMPLE_USER_INFO这个属性!无语!根据官方提供返回的的JSONObject信息解析:{"is_yellow_year_vip": "0","ret": 0,"figureurl_qq_1":"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40","figureurl_qq_2":"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100","nickname": "小罗","yellow_vip_level": "0","msg": "","figureurl_1":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50","vip": "0","level": "0","figureurl_2":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100","is_yellow_vip": "0","gender": "男","figureurl":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"}所以将返回的JSONObject中需要得到用户信息解析出来即可。这边头像提供的是url链接,所以需要自己联网下载,最好能进行缓存,这样的话就不用每次都下载了!这边只做下载没有做缓存!这个作为封装好的工具类直接调用!
/** * 根据获取图片uri到网络上获取图片 * * @param imageUri * @return */ public static Bitmap getbitmap(String imageUri) { Bitmap bitmap = null; HttpURLConnection urlConnection = null; try { URL url = new URL(imageUri); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setDoInput(true); urlConnection.connect(); InputStream is = urlConnection.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally {
is.close();urlConnection.disconnect(); } return bitmap;}接下来就是重点,这个就是获取用户的昵称和头像:
public void getUserInfo() { QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken); info.getUserInfo(new IUiListener() { @Override public void onComplete(Object response) { JSONObject json = (JSONObject) response; // 昵称 String nickname = null; try { Message msg = new Message(); nickname = json.getString("nickname"); msg.getData().putString("nickname", nickname); msg.what = 0; mHandler.sendMessage(msg); } catch (JSONException e) { e.printStackTrace(); } //头像 String smallimgurl,bigimgurl; try { Message msg = new Message(); smallimgurl = json.getString("figureurl_qq_1"); bigimgurl=json.getString("figureurl_qq_1"); msg.getData().putString("smallimgurl", smallimgurl); msg.getData().putString("bigimgurl", bigimgurl); msg.what = 1; mHandler.sendMessage(msg); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { Toast.makeText(LoginActivity.this, "getInfoError", Toast.LENGTH_LONG).show(); } @Override public void onCancel() { Toast.makeText(LoginActivity.this, "cancel", Toast.LENGTH_LONG).show(); } }); }
private String nickname,simagurl,bimagurl ;
private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 0) {nickname = msg.getData().getString("nickname");} else if (msg.what == 1) {simagurl= msg.getData().getString("smallimgurl");bimagurl= msg.getData().getString("bigimgurl");}MainActivity.startIntent(LoginActivity.this, nickname, simagurl,bimagurl);}};
/*** 提供跳转,携带昵称与大小不同的头像URL,放在目标Activity,这是一种企业习惯,在分工中,其他就知道,你跳转携带的参数是什么*不用过来询问你* @param context* @param nickname* @param simgurl* @param bimgurl*/public static void startIntent(Context context, String nickname, String simgurl, String bimgurl) {Intent intent = new Intent(context, MainActivity.class);intent.putExtra("nickname", nickname);intent.putExtra("imgurl", simgurl);intent.putExtra("bimgurl", bimgurl);context.startActivity(intent);}要注意的是在哪里调用这个方法,由于要获取用户信息,用户的状态必须是登录状态,调用如下:
private void loginForQQ() {mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());if (!mTencent.isSessionValid()) {IUiListener iUiListener = new BaseUiListener() {@Overrideprotected void doComplete(JSONObject values) {getUserInfo();//在这里}};mTencent.login(this, "all", iUiListener);}else {logout();}}之后就是跳转过去后:
/*** 开启线程根据图像url下载图像*/class MyImgThread implements Runnable {private String imgPath;private Bitmap bitmap;public MyImgThread(String imgpath) {this.imgPath = imgpath;}@Overridepublic void run() {bitmap = Util.getbitmap(imgPath);Message msg = new Message();msg.obj = Util.toRoundBitmap(bitmap);msg.what = 1;mHandler.sendMessage(msg);}}
Handler mHandler = new Handler() {@TargetApi(Build.VERSION_CODES.JELLY_BEAN)@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what==1){userbitmap= (Bitmap) msg.obj;iv_main.setBackground(drawable);}}};
MyImgThread myImgThread = new MyImgThread(imgurl);Thread thread = new Thread(myImgThread);thread.start();这样就OK了,就可以在目标UI里显示你的qq头像,昵称了,更多信息自己去试一下哈!
相关文章推荐
- Android Canvas drawText实现中文垂直居中
- [Android基础]Android中如何使用Intent传递对象
- Android插件化开发之OpenAtlas生成插件信息列表
- cordova platform add android 国内慢
- ArcGIS for Android 设置地图网格背景
- Android 关于fragment切换
- Android应用如何反馈Crash报告
- Android设置横屏和竖屏的方法
- Android HAL层解析
- Android 知识梳理
- android 进程和线程管理
- android 4.4 js调用webview activity方法记载
- Cool Android Apis 整理(一)
- Android百分比布局支持库介绍——com.android.support:percent
- Android结合volley的netWorkImageview实现图片文件缓存
- Android FragmentManage FragmentTransaction介绍(一)
- android RecyclerView 使用完全解析
- Android性能优化
- 基于mediaPlayer实现的播放器,带有分级的目录功能;
- Android Fragment基础及使用