編輯:關於Android編程
最近開始做公司的小項目,其中就有微博和QQ的用戶登錄,在這裡記錄一下,另外QQ的文檔非常惡心,鄙視一個!
微博授權登錄:
先去微博開放平台申請應用,Android應用的包名和簽名填好,然後下載導入SDK。
(很多傻瓜教程上都有這些東西的注冊流程,不過要是這些你都弄不好就別做開發了,微博的基本上看SDK裡的文檔和示例基本就沒問題了)
直接上代碼,其實很簡單:
// ///////////////////////////////////////////////////////// // // 微博登錄相關操作 zhangyue 20141201 // // ///////////////////////////////////////////////////////// private WeiboAuth weiboAuth; private Oauth2AccessToken weiboAccessToken; private SsoHandler ssoHandler; private UsersAPI usersAPI; /** * 登錄按鈕事件,進入授權登錄流程 * * @param view */ public void onWeiboLogin(View view) { weiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); // sso安全登錄 ssoHandler = new SsoHandler(this, weiboAuth); ssoHandler.authorize(new AuthListener()); } /** * 授權登錄監聽 * * @author zhang.yue * @date 2014年12月1日 */ class AuthListener implements WeiboAuthListener { @Override public void onCancel() { } @Override public void onComplete(Bundle arg0) { // 獲取到uid,token等信息 weiboAccessToken = Oauth2AccessToken.parseAccessToken(arg0); if (weiboAccessToken.isSessionValid()) { // 登錄成功,獲取用戶信息 usersAPI = new UsersAPI(weiboAccessToken); long uid = Long.parseLong(weiboAccessToken.getUid()); usersAPI.show(uid, requestListener); } else { // 登錄失敗 System.out.println(arg0.get("code")); } } @Override public void onWeiboException(WeiboException arg0) { } } /** * 監聽獲取用戶信息 */ RequestListener requestListener = new RequestListener() { @Override public void onWeiboException(WeiboException arg0) { } @Override public void onComplete(String arg0) { // 得到用戶信息json System.out.println(arg0); } };
QQ授權登錄:
同樣的去QQ互聯平台申請應用填資料,不過QQ的文檔很惡心,先看代碼,一會再說:
// ///////////////////////////////////////////////////////// // // QQ登錄相關操作 zhangyue 20141201 // // ///////////////////////////////////////////////////////// private Tencent tencent; /** * 登錄按鈕事件,進入授權登錄流程 * * @param view */ public void onQQLogin(View view) { tencent = Tencent.createInstance(Constants.QQ_APP_KEY, getApplicationContext()); tencent.login(this, Constants.QQ_SCOPE, new BaseUiListener("login")); } /** * Ui類封裝接口監聽 * @author zhang.yue * @date 2014年12月1日 */ class BaseUiListener implements IUiListener { private String scope; public BaseUiListener(String scope) { this.scope = scope; } @Override public void onCancel() { } @Override public void onError(UiError arg0) { System.err.println(arg0.errorCode); } @Override public void onComplete(Object arg0) { if (this.scope == "login") { //授權登錄成功,獲取到uid,token System.out.println(arg0); //獲取用戶信息 UserInfo userinfo = new UserInfo(LoginMainActivity.this, tencent.getQQToken()); userinfo.getUserInfo(new BaseUiListener("get_user_info")); } else if (this.scope.equals("get_user_info")) { //獲得用戶信息json格式 System.out.println(arg0); } } } /** * 非封裝類接口監聽 tencent.request(同步) tencent.requestAsync(異步) * @author zhang.yue * @date 2014年12月1日 */ // class BaseApiListener implements IRequestListener { // // @Override // public void onComplete(JSONObject arg0) { // System.out.println(arg0); // } // // @Override // public void onConnectTimeoutException(ConnectTimeoutException arg0) { // } // // @Override // public void onHttpStatusException(HttpStatusException arg0) { // } // // @Override // public void onIOException(IOException arg0) { // } // // @Override // public void onJSONException(JSONException arg0) { // } // // @Override // public void onMalformedURLException(MalformedURLException arg0) { // } // // @Override // public void onNetworkUnavailableException(NetworkUnavailableException arg0) { // } // // @Override // public void onSocketTimeoutException(SocketTimeoutException arg0) { // } // // @Override // public void onUnknowException(Exception arg0) { // } // // }在QQ的文檔中,獲取用戶信息是這樣寫的:
/** * 獲取用戶信息 */ private void onClickUserInfo() { mTencent.requestAsync(Constants.GRAPH_USER_INFO, null, Constants.HTTP_GET, new BaseApiListener("get_user_info", false), null); }
結果Constants.GRAPH_USER_INFO這個根本沒有,其實新的已經換成UserInfo類那種方式獲取了。還是得把示例導入進來看看才知道。
另外,ActivityResult也要重寫一下:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (ssoHandler != null) { ssoHandler.authorizeCallBack(requestCode, resultCode, data); } if (tencent != null) { tencent.onActivityResult(requestCode, resultCode, data); } }這樣授權和用戶信息就都拿到了,SDK版本微博是2.5,QQ是2.2。
------------------------------------------------
我的獨立博客:壊小子 - http://www.zyblog.net/
本文鏈接:http://www.zyblog.net/post-177.html
健身潮-IT人健身指南:http://www.jianshenchao.com
歡迎轉載,轉載請注明本文來源。
Android中,Activity和Fragment之間傳遞對象,可以通過將對象序列化並存入Bundle或者Intent中進行傳遞,也可以將對象轉化為JSON字符串,進行
1.簡介 對於android中的ListView刷新機制,大多數的程序員都是很熟悉的,修改或者添加adapter中的數據源之後,然後調用notifyDataSetChan
一、UI automator的簡介Uiautomator,顧名思義,是用於ui自動化測試的,主要是仿真單擊,滑動,輸入文本等操作,而不用人為地進行操作,特對對於兼容測試來
UltimateAndroid快速開發框架教程(一):部署框架 為了方便大家更好的使用UltimateAndroid進行Android快速開發,特撰寫此教程。不當之處,還