博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 调用QQ登录
阅读量:4557 次
发布时间:2019-06-08

本文共 4496 字,大约阅读时间需要 14 分钟。

调用QQ登录
       在如今的项目开发。调用第三方登录。差点儿是必须的,而调用QQ登录也是不可缺少的,这里把相关代码分享出来,希望能拿去就能够用,降低项目开发的时间。希望对大家实用。
1,去QQ开放平台注冊帐号( )。为应用申请QQ的APP_ID , 并下载相关的jar包,放到project的lib文件夹下。
2,在Manifest.xml里注冊QQ相关的Activity,代码例如以下
  
3,利用QQ提供的相关API去获取相关的OPENID,昵称。图像等资料。这里有一点要注意的是,因为QQserver返回OPENID和昵称等其它资料是分两步进行的,而首先返回的              OPENID速度非常快,返回昵称等其它资料可能会比較慢,所以在返回OPENID的时候,就能够觉得已经调用QQ登录成功,再用异步的方式处理昵称等其它资料信息。

下面是代码部 分。已经过项目測试,可直接用(替换对应的APP_ID就能够了)

import java.io.IOException;import java.net.MalformedURLException;import java.net.SocketTimeoutException;import org.apache.http.conn.ConnectTimeoutException;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import com.smart.util.BroadcastAction;import com.smart.util.BroadcastUtil;import com.smart.util.Constant;import com.smart.util.ILog;import com.smart.util.PrefUtil;import com.smart.util.Prefkey;import com.tencent.open.HttpStatusException;import com.tencent.open.NetworkUnavailableException;import com.tencent.tauth.Constants;import com.tencent.tauth.IRequestListener;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import com.tencent.tauth.UiError;import com.utils.lib.ss.common.ToastHelper;/** * QQ登陆。 * @author E */public class QqLogin {		private static QqLogin qqLogin = null;		public static QqLogin getInstance(){		if (null == qqLogin) {			qqLogin = new QqLogin();		}		return qqLogin;	}		public void login(Activity context , QqLoginListener loginListener){	    //Constant.QQ_APP_ID 这里要替换成自己申请的APP_ID		Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context);		if (null == tencent) {			ToastHelper.makeText(context, "error cased !");			return;		}		tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener));	}		class BaseUiListener implements IUiListener{		Tencent tencent = null;		QqLoginListener qqLoginListener = null;				public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) {			super();			this.tencent = tencent;			this.qqLoginListener = qqLoginListener;		}		@Override		public void onComplete(JSONObject values) {			try {				String openid = values.getString("openid");				qqLoginListener.onLoginSuccess(openid);				tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET, 						new BaseApiListener(qqLoginListener) ,null);			} catch (Exception e) {				e.printStackTrace();			}		}		@Override		public void onError(UiError arg0) {			qqLoginListener.onLoginFail();		}				@Override		public void onCancel() {			qqLoginListener.onCancel();		}	}		class BaseApiListener implements IRequestListener{				 QqLoginListener qqLoginListener = null;		public BaseApiListener(QqLoginListener qqLoginListener) {			super();			this.qqLoginListener = qqLoginListener;		}		@Override		public void onComplete(JSONObject jsonObject, Object object) {			try {				ILog.e(jsonObject.toString());				String nickName = jsonObject.getString("nickname");				String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2");				PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName);				PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1);				//发送广播到主页去更新				BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO);			} catch (Exception e) {				e.printStackTrace();			}		}		@Override		public void onConnectTimeoutException(ConnectTimeoutException arg0,				Object arg1) {		}		@Override		public void onHttpStatusException(HttpStatusException arg0, Object arg1) {					}		@Override		public void onIOException(IOException arg0, Object arg1) {					}		@Override		public void onJSONException(JSONException arg0, Object arg1) {					}		@Override		public void onMalformedURLException(MalformedURLException arg0,				Object arg1) {		}		@Override		public void onNetworkUnavailableException(				NetworkUnavailableException arg0, Object arg1) {		}		@Override		public void onSocketTimeoutException(SocketTimeoutException arg0,				Object arg1) {		}		@Override		public void onUnknowException(Exception arg0, Object arg1) {		}	}		/**	 * 授权完毕后。运行一下步的回调	 */	public static abstract class QqLoginListener{		public void onLoginSuccess(String openid){};		public void onLoginSuccess(String openid, String nickname){};		public void onLoginFail(){};		public void onCancel(){};	}
      好了,到里代码部分已经写完,仅仅须要调用login(Activity context , QqLoginListener loginListener)方法就能够了。

转载于:https://www.cnblogs.com/lxjshuju/p/6874069.html

你可能感兴趣的文章
Mybatis步骤
查看>>
WPF自定义控件之扩展原生控件
查看>>
《区块链100问》笔记整理——42~49问
查看>>
使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
查看>>
深入理解计算机系统(1.4)---并发与并行、浅谈抽象
查看>>
函数依赖的公理化系统
查看>>
rabbitmq学习(四):利用rabbitmq实现远程rpc调用
查看>>
侯捷C++学习(二)
查看>>
EasyPlayer RTSP Android安卓播放器修复播放画面卡在第一帧bug
查看>>
web项目中全局常量的添加
查看>>
搬运工程 启动!
查看>>
局部加权回归(LWR) Matlab模板
查看>>
Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
查看>>
hibernate在使用getCurrentSession时提示no session found for current thread
查看>>
【Luogu1471】方差(线段树)
查看>>
【agc028E】High Elements(动态规划,线段树,贪心)
查看>>
DEV中svg图标的使用
查看>>
Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)
查看>>
有关位运算的操作+二进制状态压缩
查看>>
Eclipse插件 -- 阿里巴巴扫描编码规插件
查看>>