首页 《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)

《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)

举报
开通vip

《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理) 本文档来自 安卓巴士(www.apkbus.com)整理总结 《手把手教你用Android开发新浪微博客户端》 作者:水的右边 作者博客:http://www.cnblogs.com/hll2008/ (注:本文档用于学习开发使用,勿作为任何商业活动使用,如作者有版权问题,请联系安 卓巴士网友:巴士小白) 本文档来自 安卓巴士(www.ap...

《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)
本文档来自 安卓巴士(www.apkbus.com)整理总结 《手把手教你用Android开发新浪微博客户端》 作者:水的右边 作者博客:http://www.cnblogs.com/hll2008/ (注:本文档用于学习开发使用,勿作为任何商业活动使用,如作者有版权问题,请联系安 卓巴士网友:巴士小白) 本文档来自 安卓巴士(www.apkbus.com)整理总结   目录:      第一、 android 开发我的新浪微博客户端‐开篇    第二、 android 开发我的新浪微博客户端‐载入页面 UI篇(1.1)    第三、 android 开发我的新浪微博客户端-载入页面 sqlite 篇(1.2)    第四、 android 开发我的新浪微博客户端-OAuth 篇(2.1)                                                          本文档来自 安卓巴士(www.apkbus.com)整理总结       第一、android 开发我的新浪微博客户端‐开篇      开始接触学习 android 已经有 3 个礼拜了,一直都是对着 android 的 sdk 文档写 Tutorials 从 Hello World 到 Notepad Tutorial 算是初步入门了吧,刚好最近对微博感兴趣就打 算开发个 android 版本的新浪微博客户端作为练手项目,并且以随笔的方式详细的记录开发 的全过程。本人对 java 语言以及 eclipse Ide都是初次应用基本上属于边学边用,做移动设备 上的东西也是第一次,总的来说属于无基础、无经验、无天赋的纯三无人员,还请广大同学 们多多给予指点。    开发第一件事情,那就是开发工具以及环境,我的配置是 Eclipse Helios (3.6.1) + Adroid2.2, 具体的环境搭建我就不罗嗦了,google一下一大堆,光博客园里都能搜到很多篇了。    开发第二件事情,既然是开发新浪的微博客户端,那就先去新浪 申请 关于撤销行政处分的申请关于工程延期监理费的申请报告关于减免管理费的申请关于减租申请书的范文关于解除警告处分的申请 微博账号然后登陆 最后在说一下,我准备分为 UI 和功能两部分分别进行说明讲解,据我自己的情况大部 最后还要在说一下,很抱歉上面内容基本上属于废话没有什么实质内容了但是既然是第 一篇 后到新浪的开放平台,新浪的开放平台提供的新浪微博对外的 api接口,在我的应用中创建 一个新的应用获取 App Key和 App Secret,这 2 个值后面会有用到先记录下来。在新浪的开 放平台中提供了开发文档、SDK、接口测试工具等,本人决定直接通过新浪的 Rest Api进行 开发并不打算使用新浪提供的 SDK,据说新浪提供的 java 版的 SDK 并不能直接用来进行 android 的开发需要进行一定的修改才能使用,只是听说我没有试过不一定准确。      分的时间都花在的 UI的设计和实现上了,编码倒反而工作量小多了,所以特别把 UI部分分 出来讲。    还是得象征性的交代一下,从下篇开始讲具体的内容。                      第二 所以 两种 用 B 转向 简易 信息 源的 密码 个 a 发的 效的 序写 二、andro 本篇说 以有必要专门 种认证方式, Base OAuth 认 向 OAuth认证   OAuth 易的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。与 息(如用户名 的 授权 个人房产授权委托书公司各类授权委托书模版医师授权办法餐饮分店授权书产品代理授权书范本 ,因此 码的安全,在 ndroid 客户端 的这个 androi 的保护了用户 写微博看微博   本文档来 oid 开发我 说说关于OAu 门来讲讲,前面 并且本项目 认证原因很简 证方式,而新 的基本概念 与以往的授权 名与密码),即 此 OAUTH是安 在这里通过 O 端程序)、新 id 客户端程序 户账号的安全 博目的。这个 来自 安卓巴士 我的新浪微 th授权认证 面的文章中已 采用 OAuth 简单,自从 Tw 新浪微博的开 ,OAUTH 协 权方式不同之 即第三方无需 安全的。同样 Auth建立普 新浪微博三者 序)不需要知 全性不需要把 个是 OAuth 的 士(www.ap 微博客户端 的事情,新浪 已经提到过关 认证方式, witter只支持 开放平台也将 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 为用户资源 处是 OAUTH 需使用用户的 样新浪微博提 普通新浪微博 者之间的相互 知道用户的账 账号密码透露 的作用。  pkbus.com)整 端‐载入页 浪开放 api都必 关于新浪微博 至于为什么采 持 OAuth 认证 在近日停止 源的授权提供 的授权不会 的用户名与密 提供 OAuth 认 用户、客户端 信任关系,让 账号和密码也 露给客户端程 整理总结 页面 UI 篇   (1.1)  必须在这个基基础上才能调调用, 博提供了 OAu 采用这个 OA 证方式以来, Base OAuth uth和 Base O Auth 认证而不 各大应用都 的认证方式。 OAuth 不采 都纷纷 。  供了一个安全全的、开放而而又 会使第三方触 密码就可以申 认证也是为了 端程序(我们 让客户端程序 也能浏览、发 程序又达到了 触及到用户的 请获得该用 了保证用户账 们正在开发的 序(我们正在 发布微博,这 了通过客户端 帐号 户资 号和 的这 在开 这样有 端程 结合新浪微博的 OAuth 认证来说说具体的功能实现,首先罗列一下关键字组,下 面四 第一组:(App Key和 App Secret),这组参数就是本系列文本第一篇提到的建一个 新的 第二组:(Request Token 和 Request Secret)  第三组:(oauth_verifier)  第四组:(user_id、Access Token和 Access Secret)  新浪微博的 OAuth认证过程,当用户第一次使用本客户端软件时,客户端程序用 第一 本项目用为了方便开发采用了 oauth‐signpost 开源项目进行 OAuth 认证开发,新建 OAu 过程中用 uthConsumer httpOauthConsumer; ; blic OAuth() 第一组:(App Key和 App Secret) 个新的应用获取 App Key和 3315495489","e2731e7grf592c0fd7fea32406f86e1b"); lic OAuth(String consumerKey,String consumerSecret) 组关键字跟我们接下来 OAuth认证有非常大的关系。    应用获取 App Key和 App Secret。          组作为参数向新浪微博发起请求,然后新浪微博经过验证后返回第二组参数给客户端软 件同时表示新浪微博信任本客户端软件,当客户端软件获取第二组参数时作为参数引导用户 浏览器跳至新浪微博的授权页面,然后用户在新浪的这个授权页面里输入自己的微博账号和 密码进行授权,完成授权后根据客户端设定的回调地址把第三组参数返回给客户端软件并表 示用户也信任本客户端软件,接下客户端软件把第二组参数和第三组参数作为参数再次向新 浪微博发起请求,然后新浪微博返回第四组参数给客户端软件,第四组参数需要好好的保存 起来这个就是用来代替用户的新浪账号和密码用的,在后面调用 api时都需要。从这个过程 来看用户只是在新浪微博的认证网页输入过账户和密码并没有在客户端软件里输入过账户 和密码,客户端软件只保存了第四组数据并没有保存用户的账户和密码,这样有效的避免了 账户和密码透露给新浪微博之外的第三方应用程序,保证  了安全性。    th.java 类文件对 OA进行简单的封装,OAuth类主要有 RequestAccessToken、 GetAccessToken、SignRequest 三个 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,第一个方法 RequestAccessToken就是上面 来获取第三组参数用的,GetAccessToken 方法是用来获取第四组参数用,SignRequest 方法是 用来调用 api用。由于采用了 oauth‐signpost 开源项目简单了很多。具体代码如下:  public class OAuth { private CommonsHttpOA private OAuthProvider httpOauthprovider; public String consumerKey; public String consumerSecret pu { // // 这组参数就是本系列文本第一篇提到的建一 App Secret。 this(" } pub { this.consumerSecret=consumerSec } pu ckUrl){ B try{ ht Key,consumerSecret); httpOauthp t.sina.com.cn/oauth/request_token","http://api.t.sina.com.cn/oauth/ac cess_token","http://api.t.sina.com.cn/oauth/authorize"); String authUrl = httpOauthprovider.retrieveReq ttpOauthConsumer, callBackUrl); activity.startActivit .parse(authUrl))); ret=true }catch(Exceptio } ret } pu UserInfo user=null; Uri uri = intent.getD String verifier = uri.getQuer OAUTH_VERIFIER); try { htt httpOauthprovider.retrieveAccessToken(h erifier); } catch ex.printStackTrace(); } catch (OAuthNotAuthorized ex.printStackTrace(); } catch (OAuthExpectationFa ex.printStackTrace(); } catch (OAuthCommunication ex.printStackTrace(); } Sor eters().get("user_id"); String userId=use this.consumerKey=consumerKey; ret; blic Boolean RequestAccessToken(Activity activity,String callBa oolean ret=false; tpOauthConsumer = new CommonsHttpOAuthConsumer(consumer rovider = new DefaultOAuthProvider("http://api. uestToken(h y(new Intent(Intent.ACTION_VIEW, Uri ; n e){ urn ret; blic UserInfo GetAccessToken(Intent intent){ ata(); yParameter(oauth.signpost.OAuth. pOauthprovider.setOAuth10a(true); ttpOauthConsumer,v (OAuthMessageSignerException ex) { Exception ex) { iledException ex) { Exception ex) { tedSet user_id= httpOauthprovider.getResponseParam r_id.first(); String userKey = httpOauthConsum String userSecret = httpOauthConsumer.getTokenSe user=new UserInfo(); user.setUserId(userId) user.setToken(userKey); user.setTokenSecret(userS return user; } pu tring url,List params) { //HttpClient httpClient = null; try{ po )); e.printStackTrace(); } //关闭 //100-Continue握手需谨慎使用,因为 代理时会引起问题 post.ge XPECT_CONTINUE, false); return SignReques } pu ttpPost post){ httpOaut consumerSecret); httpOauthC HttpResponse response = null; try { htt } catch (OAuthMessageSignerExceptio e.printStackTrace(); } catch (OAuthExpectationF e.printStackTrace(); } catch (OAuthCommunicatio e.printStackTrace(); } //取得 er.getToken(); cret(); ; ecret); blic HttpResponse SignRequest(String token,String tokenSecret,S HttpPost post = new HttpPost(url); st.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8 } catch (UnsupportedEncodingException e) { Expect:100-Continue握手 遇到不支持 HTTP/1.1协议的服务器或者 tParams().setBooleanParameter(CoreProtocolPNames.USE_E t(token,tokenSecret,post); blic HttpResponse SignRequest(String token,String tokenSecret,H hConsumer = new CommonsHttpOAuthConsumer(consumerKey, onsumer.setTokenWithSecret(token,tokenSecret); pOauthConsumer.sign(post); n e) { ailedException e) { nException e) { HTTP response try { res } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } ret } } ponse = new DefaultHttpClient().execute(post); urn response; 这样就完成了 OAuth 功能类的开发,后面都会用到这个类相关的方法。本篇到这里就 算是 本文档来自 安卓巴士(www.apkbus.com 完结请继续关注后面的文章。 )整理总结 了载 么是 行详 的新 本项 sqlit 出来 始检 的记 授权 库中 值然 息。 第三、an 通过上 载入页面的 U   首先说 是 OAuth和 B 详细的说明以 新浪UserID、A 项目是这样做 te库中以便用 来即可,由于 检查 sqlite 库 记录,如果一条 权认证操作( 中,如果已经 然后根据这 3   本文档来 ndroid 开 上一篇文章(a I部分的实现 说明一下新浪 Base OAuth 请 以及具体实现 Access Token、 做的当用户第 用户下次使用 这样的需求载 中是否已经保 条记录都没有 (认证授权功 经包括了记录 个值调用新 来自 安卓巴士 开发我的新 android 开发 现,效果如上图 浪微博提供了 请自己 google 现),本项目是 、Access Secre 第一次使用软 用时不需要重 载入页面的功 保存有用户的 有那就说明用 功能在接下来 录,那么读取 浪的 api接口 士(www.ap 新浪微博客 发我的新浪微 图,接下来在上 OAuth 和 Ba e一下恶补, 是采用 OAuth et这3样东西 件时进行授权 重新进行繁琐 功能设定是这 的新浪微博的 用户是第一次 的两篇中进行 这些记录的 口获取这些记 pkbus.com)整 客户端-载 博客户端‐载 上面的基础上 ase OAuth 两 同时接下来 h 认证方式, 西才能自由便 权认证获取这 琐的授权认证 这样:当用户 的 UserID 号、 次使用本软件 行实现讲解) UserID 号、A 记录对应的用 整理总结 载入页面 sq   qlite 篇(1.2) 入页面 UI (1.1))已载 篇篇 经经完成 上完成载入页页面的功能代代码。  两种认证方式(如果不知道道什 来的 2 篇随笔 采用这种方 便利的调用新 这 3 样东西的 证操作直接从 户打开软件显 、Access Toke 件那么跳到认 )获取这 3 个 Access Token 用户昵称和用 笔也会对这方 方式就需要有 新浪的开放接 的时候存储到 从 sqlite 库中读 显示载入页面 en、Access S 认证授权页面 个值保存到 s n、Access Sec 用户头像图标 方面进 用户 接口, 到 读取 面时开 ecret 面进行 sqlite cret 标等信   上面功能设定中涉及到 sqlite 数据库的创建、数据表的创建、数据记录的添加、数 据记 SqliteHelper extends SQLiteOpenHelper{ 录的读取等操作,这里新建名为 SqliteHelper.java 类文件提供 sqlite 数据表的创建、更新 等,代码如下:  public class //用来保存 UserID、Access Token、Access Secret static final String TB_NAME="users"; ame, CursorFactory f ame, factory, version); onCreate(SQLiteDatabase db) { "+ integer primary key,"+ r,"+ ase","onCreate"); onUpgrade(SQLiteDatabase db, int oldVersion, int newV execSQL("DROP TABLE IF EXISTS " + TB_NAME); ","onUpgrade"); id updateColumn(SQLiteDatabase db, String oldColumn, Str .execSQL("ALTER TABLE " + + mn + 的表名 public public SqliteHelper(Context context, String n actory, int version) { super(context, n } //创建表 @Override public void db.execSQL("CREATE TABLE IF NOT EXISTS TB_NAME+"("+ UserInfo.ID+" UserInfo.USERID+" varchar,"+ UserInfo.TOKEN+" varchar,"+ UserInfo.TOKENSECRET+" varcha UserInfo.USERNAME+" varchar,"+ UserInfo.USERICON+" blob"+ ")" ); Log.e("Datab } //更新表 @Override public void ersion) { db. onCreate(db); Log.e("Database } //更新列 public vo ing newColumn, String typeColumn){ try{ db TB_NAME + " CHANGE " oldColumn + " "+ newColu " " + typeColumn ); }catch(E e.printStackTrace( } } } xception e){ ); 接下来新建名为 DataHelper.java 类文件实现用户记录的创建、更新、删除等,代码 如下 lic class DataHelper { ic String DB_NAME = "mysinaweibo.db"; ic int DB_VERSION = 2; r; blic DataHelper(Context context){ ,DB_NAME, null, DB_VERSION); blic void Close() db.close(); e(); users表中的 UserID、Access Token、Access Secret的记录 List userList = new ArrayList(); l, null st()&& (cursor.getString(1)!=null)){ ; ); 3)); (cursor.getString(4)); rayInputStream(cu icon= Drawable.createFromStream(stream, "image"); : pub //数据库名称 private stat //数据库版本 private stat private SQLiteDatabase db; private SqliteHelper dbHelpe pu dbHelper=new SqliteHelper(context db= dbHelper.getWritableDatabase(); } pu { dbHelper.clos } //获取 public List GetUserList(Boolean isSimple) { Cursor cursor=db.query(SqliteHelper.TB_NAME, null, nul , null, null, UserInfo.ID+" DESC"); cursor.moveToFirst(); while(!cursor.isAfterLa UserInfo user=new UserInfo(); user.setId(cursor.getString(0)) user.setUserId(cursor.getString(1) user.setToken(cursor.getString(2)); user.setTokenSecret(cursor.getString( if(!isSimple){ user.setUserName ByteArrayInputStream stream = new ByteAr rsor.getBlob(5)); Drawable user.setUserIcon(icon); } use cursor.moveToNext(); } cur return userList; } // public Boolean HaveUserInfo(String UserI { Cursor cursor=db.q SERID + "=" + UserId, null, null, null,null); b=cursor.moveToFirst(); Log.e("HaveUserInfo",b.to cursor.close(); return b; } // public int UpdateUserInfo(String userName,Bitmap u UserId) { values.put(UserInfo.USERNAME, userName); // BLOB类型 final ByteArray userIcon.compress(Bitmap.CompressFormat.PNG, 100, // 构造 SQLite的 Content对象,这里也可以使用 raw values.put(UserInfo.USERICON, os.toByteArray()) int id= db.update(SqliteHelper.TB_NAME, values, Us ID + "=" + UserId, null); Log.e("UpdateUserIn return id; } // public int UpdateUse { rList.add(user); sor.close(); 判断 users表中的是否包含某个 UserID的记录 d) Boolean b=false; uery(SqliteHelper.TB_NAME, null, UserInfo.U String()); 更新 users表的记录,根据 UserId更新用户昵称和用户图标 serIcon,String ContentValues values = new ContentValues(); OutputStream os = new ByteArrayOutputStream(); // 将 Bitmap压缩成 PNG编码,质量为 100%存储 os); ; erInfo.USER fo2",id+""); 更新 users表的记录 rInfo(UserInfo user) ContentValues values = new ContentValues(); values.put(UserInfo.USERID, user.getUserId()) values.put(UserInfo.TOKEN, user.getToken()); values.put(UserInfo.TOKENSECRET, user.getToken int id= db.update(SqliteHelper.TB_NAME, values, UserInfo.U ID + "=" + user.getUserId(), null); Log.e("UpdateUserInfo",id+"") return id; } // public Long SaveUser { values.put(UserInfo.USERID, user.getUserId()) values.put(UserInfo.TOKEN, user.getToken()); values.put(UserInfo.TOKENSECRET, user.getToken Long uid = db.insert(SqliteHelper.TB_NAME, UserInfo.ID, va s); return uid; } // public int DelUserIn int id= db.delete(SqliteHelper.TB_N +UserId, null); Log.e("De return id; } } ; Secret()); SER ; 添加 users表的记录 Info(UserInfo user) ContentValues values = new ContentValues(); ; Secret()); lue Log.e("SaveUserInfo",uid+""); 删除 users表的记录 fo(String UserId){ AME, UserInfo.USERID +"=" lUserInfo",id+""); 完成上面的代码后,我们需要在载入页面中调用上面的方法实现 sqlite 库中是否已 经保 savedInstanceState) { ...... //获取账号列表 ataHelper(this); r.GetUserList(true); 存有用户的新浪微博的 UserID号、Access Token、Access Secret 的记录的功能在 MainActivity的 onCreate方法添加代码:  public void onCreate(Bundle super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelper=new D List userList= dbHelpe if(userList.isEmpty())//如果为空说明第一次使用跳到 AuthorizeActivity页面进行 OAuth认证 { intent.setClass(MainActivity.th lass); } els 值 头像图标等信息。 { ...... } } } Intent intent = new Intent(); is, AuthorizeActivity.c startActivity(intent); e//如果不为空读取这些记录的 UserID号、Access Token、Access Secret //然后根据这3个值调用新浪的 api接口获取这些记录对应的用户昵称和用户 for(UserInfo user:userList){ 关于载入页面的 sqlite就说到这里了,下一篇说说 OAuth认证实现。 本文档来自 安卓巴士(www.apkbus.com )整理总结 第四 以有 两种 用 B 转向 的标 (如 授权 码的 andr 这个 保护 微博 四、andro 本篇说说关 有必要专门来 种认证方式, Base OAuth 认 向 OAuth 认证 OAuth 的基 标准。与以往的 如用户名与密 权,因此 OAU 的安全,在这 roid 客户端程 个 android 客户 护了用户账号 博看微博目的 结合新浪微 本文档来 oid 开发我 关于 OAuth 授 来讲讲,前面 并且本项目 认证原因很简 证方式,而新 基本概念,OA 的授权方式不 密码),即第三 UTH 是安全 这里通过 OAu 程序)、新浪微 户端程序)不 号的安全性不 的。这个是 O 微博的 OAuth 来自 安卓巴士 我的新浪微 授权认证的事 面的文章中已 采用 OAuth 简单,自从 Tw 新浪微博的开 AUTH 协议为 不同之处是 O 三方无需使用 全的。同样新 uth 建立普通 微博三者之间 不需要知道用 不需要把账号 OAuth 的作用 h 认证来说说 士(www.ap 微博客户 事情,新浪开放 经提到过关于 认证方式, Twitter 只支持 开放平台也将 为用户资源的 OAUTH 的授 用用户的用户 浪微博提供 通新浪微博用 间的相互信任 用户的账号和 密码透露给客 用。 说具体的功能 pkbus.com)整 端-OAuth 放 api 都必须 于新浪微博提 至于为什么采 持 OAuth 认证 将在近日停止 的授权提供了 授权不会使第 户名与密码就 OAuth 认证 户、客户端程 任关系,让客 和密码也能浏 客户端程序又 能实现,首先 整理总结 h 篇(2.1) 须在这个基础础上才能调用用,所 提供了 OAut 采用这个 OA 证方式以来, Base OAuth th 和 Base OA Auth 认证而不 各大应用都 h 的认证方式 Auth 不采 都纷纷 式。 了一个安全的 第三方触及到 就可以申请获 也是为了保证 程序(我们正 客户端程序( 浏览、发布微 又达到了通过 罗列一下关键 的、开放而又简易 到用户的帐号 获得该用户资 证用户账号和 正在开发的这 (我们正在开 微博,这样有 过客户端程序 信息 源的 和密 这个 发的 有效的 序写 键字组,下面面四 组关键字跟我们接下来 OAuth 认证有非常大的关系。 第一组:(App Key 和 App Secret),这组参数就是本系列文本第一篇提到的建一个新的 第二组:(Request Token 和 Request Secret) 第三组:(oauth_verifier) 第四组:(user_id、Access Token 和 Access Secret) 新浪微博的 OAuth 认证过程,当用户第一次使用本客户端软件时,客户端程序用第一 本项目用为了方便开发采用了 oauth-signpost 开源项目进行 OAuth 认证开发,新建 过程中 AuthConsumer httpOauthConsumer; ; blic OAuth() 第一组:(App Key和 App Secret) 个新的应用获取 App Key和 3315495489","e2731e7grf592c0fd7fea32406f86e1b"); lic OAuth(String consumerKey,String consumerSecret) this.consumerKey=consumerKey; 应用获取 App Key 和 App Secret。 组作为参数向新浪微博发起请求,然后新浪微博经过验证后返回第二组参数给客户端软件同 时表示新浪微博信任本客户端软件,当客户端软件获取第二组参数时作为参数引导用户浏览 器跳至新浪微博的授权页面,然后用户在新浪的这个授权页面里输入自己的微博账号和密码 进行授权,完成授权后根据客户端设定的回调地址把第三组参数返回给客户端软件并表示用 户也信任本客户端软件,接下客户端软件把第二组参数和第三组参数作为参数再次向新浪微 博发起请求,然后新浪微博返回第四组参数给客户端软件,第四组参数需要好好的保存起来 这个就是用来代替用户的新浪账号和密码用的,在后面调用 api 时都需要。从这个过程来看 用户只是在新浪微博的认证网页输入过账户和密码并没有在客户端软件里输入过账户和密 码,客户端软件只保存了第四组数据并没有保存用户的账户和密码,这样有效的避免了账户 和密码透露给新浪微博之外的第三方应用程序,保证 了安全性。 OAuth.java 类文件对 OA 进行简单的封装,OAuth 类主要有 RequestAccessToken、 GetAccessToken、SignRequest 三个方法,第一个方法 RequestAccessToken 就是上面 用来获取第三组参数用的,GetAccessToken 方法是用来获取第四组参数用,SignRequest 方 法是用来调用 api 用。由于采用了 oauth-signpost 开源项目简单了很多。具体代码如下: public class OAuth { private CommonsHttpO private OAuthProvider httpOauthprovider; public String consumerKey; public String consumerSecret pu { // // 这组参数就是本系列文本第一篇提到的建一 App Secret。 this(" } pub { this.consumerSecret=consumerSec } pu ckUrl){ B try{ ht Key,consumerSecret); httpOauthp t.sina.com.cn/oauth/request_token","http://api.t.sina.com.cn/oauth/ac cess_token","http://api.t.sina.com.cn/oauth/authorize"); String authUrl = httpOauthprovider.retrieveReq ttpOauthConsumer, callBackUrl); activity.startActivit .parse(authUrl))); ret=true }catch(Exceptio } ret } pu UserInfo user=null; Uri uri = intent.getD String verifier = uri.getQuer OAUTH_VERIFIER); try { htt httpOauthprovider.retrieveAccessToken(h erifier); } catch ex.printStackTrace(); } catch (OAuthNotAuthorized ex.printStackTrace(); } catch (OAuthExpectationFa ex.printStackTrace(); } catch (OAuthCommunication ex.printStackTrace(); } Sor eters().get("user_id"); String userId=use String userKey = httpOauthConsum ret; blic Boolean RequestAccessToken(Activity activity,String callBa oolean ret=false; tpOauthConsumer = new CommonsHttpOAuthConsumer(consumer rovider = new DefaultOAuthProvider("http://api. uestToken(h y(new Intent(Intent.ACTION_VIEW, Uri ; n e){ urn ret; blic UserInfo GetAccessToken(Intent intent){ ata(); yParameter(oauth.signpost.OAuth. pOauthprovider.setOAuth10a(true); ttpOauthConsumer,v (OAuthMessageSignerException ex) { Exception ex) { iledException ex) { Exception ex) { tedSet user_id= httpOauthprovider.getResponseParam r_id.first(); er.getToken(); String userSecret = httpOauthConsumer.getTokenSe user=new UserInfo(); user.setUserId(userId) user.setToken(userKey); user.setTokenSecret(userS return user; } pu tring url,List params) { //HttpClient httpClient = null; try{ po )); e.printStackTrace(); } //关
本文档为【《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_961138
暂无简介~
格式:pdf
大小:354KB
软件:PDF阅读器
页数:19
分类:互联网
上传时间:2012-04-20
浏览量:39