您的位置:首页 > 移动开发 > Android开发

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头像,昵称了,更多信息自己去试一下哈!
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: