这里需要用到请求授权(authorize)以及获取授权(access_token)

第一步:

将新浪的sdk放在src/libs下面

二:

  1. //创建方法实现authorize
  2. public void getauthorize(){
  3. //获取实例
  4. //实例化的方法一般有三种
  5. //1.最常见的通过new;2.通过getinstence;3.通过工厂(Facetory)
  6. Weibo weibo=Weibo.getInstence();//里面有三个参数.String appKey, String redirectUrl, String aScope,
  7. //分别是你应用的appKey,网址,想要获取的权限可以把这些属性写在一个类里面设置成静态
  8. //这里需要两个参数,一个为context,一个listenr
  9. //context很好解决放的就是this,而listener需要的是WeiboAuthListener类型,我们没有所有就直接new一个
  10. weibo.aututhorize(this,new WeiboAuthListener(){
  11. //WeiboAuthListener里面自动生成4个方法
  12. //抛出异常时
  13. @Override
  14. public void onWeiboException(WeiboException arg0) {
  15. Log.d(TAG, "onWeiboException" + arg0);
  16.  
  17. }
  18.  
  19. // 出错时
  20. @Override
  21. public void onError(WeiboDialogError arg0) {
  22. Log.d(TAG, "onError" + arg0);
  23.  
  24. }
  25.  
  26. // 成功时
  27. @Override
  28. public void onComplete(Bundle arg0) {//这里的Bundle arg0就是返回的code数据
  29. Log.d(TAG, "onComplete" + arg0);
  30. String code = arg0.getString("code");
  31. //这是获得Toak的方法,在下面会写到
  32. getToken(code);
  33. }
  34.  
  35. // 取消时
  36. @Override
  37. public void onCancel() {
  38. Log.d(TAG, "onCancel=====");
  39.  
  40. }
  41.  
  42. });
  43. }

现在已经获得code,现在我们需要通过code得到Token

  1. //实现access_token获取已经授权的Access_token
  2.  
  3. public void getToken(){
  4. //现在来填充参数
  5. String url="https://api.weibo.com/oauth2/access_token";//注意这里不能有空格
  6. WeiboParameters params=new WeiboParameters();
  7. //params的中文就是参数的意思,所有将参数放在里面,所需的请求参数新浪API里面都有http://open.weibo.com/wiki/OAuth2/access_token
  8. params.add("client_id", staticname.AppKey);//第一个是key,第二个是value
  9. params.add("client_secret", staticname.App_Secret);
  10. params.add("grant_type", "authorization_code");
  11. params.add("code", code);
  12. params.add("redirect_uri", staticname.RedirectUrl);
  13.  
  14. //第一步先写下面这个
  15. AsyncWeiboRunner.request(url,params,"POST",new RequestListener(){
  16. //自动生成四个方法
  17. @Override
  18. public void onIOException(IOException arg0) {
  19. Log.d(TAG, "onIOException------" + arg0);
  20.  
  21. }
  22.  
  23. @Override
  24. public void onError(WeiboException arg0) {
  25. Log.d(TAG, "onError------" + arg0);
  26.  
  27. }
  28.  
  29. @Override
  30. public void onComplete4binary(ByteArrayOutputStream arg0) {
  31. Log.d(TAG, "onComplete4binary------" + arg0);
  32.  
  33. }
  34.  
  35. @Override
  36. public void onComplete(String js) {// 得到Toak的就是js
  37. Log.d(TAG, "onComplete------" + js);
  38. //这里json解析的作用下面会讲到
  39. Json json = new Json();
  40. try {
  41. json.pramas(js, Welcom.this);
  42. handler.sendEmptyMessage(CODE_VIEWPAGER);
  43. } catch (JSONException e) {
  44. // TODO Auto-generated catch block
  45. e.printStackTrace();
  46. }
  47. }
  48.  
  49. )};//这里需要四个参数分别是String url, WeiboParameters params, String httpMethod, RequestListener listener
  50. //第一个参数代表是新浪API里的所给网站,第二,四个参数没有和上面的方法一样new出来,第三个参数新浪API同样给出了是POST
  51.  
  52. }

现在已经获得Token了,那我们要实现如果用户已经授权过了之后,在token的有效期之前都不用重新授权的效果

这就需要将获得的Token解析并且使用SharedPreferences来存储

  1. //新建一个类
  2. //Token的返回数据请查看新浪微博API
  3. public class Json{
  4. //需要获取数据源,所以在方法上加了一个String js,至于为什么还要加一个context在Sharde会讲到
  5. public void json(String js,Context context){
  6. JsonObject json=new JsonObject(js);
  7. //这里我们只需三个数据
  8. String access_token = jsonObject.getString("access_token");
  9. long expires_in = jsonObject.getLong("expires_in");//有效期
  10. String uid = jsonObject.getString("uid");//用户id
  11. Sharder sharder = new Sharder();
  12. //将解析得到的数据存入SharedPreferences
  13. sharder.putToke(context, access_token, expires_in);
  14. sharder.putuid(context, uid);
  15. }
  16.  
  17. }

Json.class

  1. //新建一个类来存储数据
  2. public class Sharde(){
  3.  
  4. public void putToken(Context context,String token,long expires_in){
  5. //要使用context调用get来获取SharedPreferences,而json里要使用此方法,所以json里面也要有context
  6. SharedPreferences preferences=context.getSharedPreferences("token",SharedPreferences.Moden_PRI);//第一个是SharedPreferences的名字,第二个是数据存储形式
  7. Editor editor= preferences.edit();
  8. editor.putString("token",token);//因为这要放token的值所以要在方法里写上
  9. editor.putLong("expires_in",expires_in);
  10. //这个不要忘了
  11. editor.commt;
  12. }
  13. public void putuid(Context context,String uid){
  14. SharedPreferences preferences=context.getSharedPreferences("uid",SharedPreferences.Moden_PRI);
  15. Editor editor= preferences.edit();
  16. editor.putString("token",token);
  17. //这个不要忘了
  18. editor.commt;
  19. }
  20. //将SharedPreferences,的数据拿出来,以供判断使用
  21. public Oauth2AccessToken getToken(){
  22. SharedPreferences preferences=context.getSharedPreferences("token",SharedPreferences.Moden_PRI);
  23. String token = preferences.getString("token", null);//第二个参数是默认值的意思
  24. long expires_in = preferences.getLong("expires_in", 0);
  25. return new Oauth2AccessToken(token,expires_in+"") ;//返回Token,里面不能放long型所以要转成String型
  26. }
  27.  
  28. public String getuid(){
  29. SharedPreferences preferences = context.getSharedPreferences("uid",
  30. context.MODE_PRIVATE);
  31. String uid = preferences.getString("uid", null);
  32. return uid;
  33. }
  34.  
  35. }

Sharde.class

现在我们要在主Activty里面判断

  1. public void onClick(View v) {
  2. if (sharder.getToke(Welcom.this).isSessionValid()) {
  3. Intent intent=new Intent(Welcom.this,Viewpager.class);
  4. startActivity(intent);//这是实现跳转的,下篇文章再说
  5. return;
  6. }
  7. getcode();
  8.  
  9. }
  10. });

最后不要忘记注册Activty和权限

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这并不是一篇教程,仅仅是我给老师教的作业,代码也不是在eclipse里面打的,里面可能有很多错误,希望大家多多见谅,源代码明天再上传,今天太累了

安卓仿制新浪微博(一)之OAuth2授权接口的更多相关文章

  1. 微信OAuth2.0网页授权接口

    微信OAuth2.0网页授权接口 微信OAuth2.0网页授权接口的thinkphp实现版本号.主要实现了oauth网页受权,以及部分其它接口. 用法 为什么用OAuth2.0受权? 通过OAuth2 ...

  2. [iOS微博项目 - 2.1] - 获得新浪授权接口

    A.如何获得新浪的授权接口 登陆新浪的开放平台 注册新浪账号 创建应用 获得应用id和请求地址 查阅相关API 关联需要进行测试的账号   1.登陆开放平台 http://open.weibo.com ...

  3. [认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)

    1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证授权] 1.OAuth2授权中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得 ...

  4. 微信企业号OAuth2验证接口实例(使用SpringMVC)

    微信企业号OAuth2验证接口(使用SpringMVC) 企业应用中的URL链接(包含自己定义菜单或者消息中的链接).能够通过OAuth2.0来获取员工的身份信息. 注意.此URL的域名,必须全然匹配 ...

  5. Spring Security OAuth2 授权码模式

     背景: 由于业务实现中涉及到接入第三方系统(app接入有赞商城等),所以涉及到第三方系统需要获取用户信息(用户手机号.姓名等),为了保证用户信息的安全和接入方式的统一, 采用Oauth2四种模式之一 ...

  6. Spring Security OAuth2 授权失败(401) 问题整理

    Spring Cloud架构中采用Spring Security OAuth2作为权限控制,关于OAuth2详细介绍可以参考 http://www.ruanyifeng.com/blog/2014/0 ...

  7. 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法

    利用Laravel 搭建oauth2 API接口 要求 laravel 5.4以上 安装 $ composer require laravel/passport 在配置文件 config/app.ph ...

  8. 微信授权就是这个原理,Spring Cloud OAuth2 授权码模式

    上一篇文章Spring Cloud OAuth2 实现单点登录介绍了使用 password 模式进行身份认证和单点登录.本篇介绍 Spring Cloud OAuth2 的另外一种授权模式-授权码模式 ...

  9. Spring Security 实战干货:客户端OAuth2授权请求的入口

    1. 前言 在Spring Security 实战干货:OAuth2第三方授权初体验一文中我先对OAuth2.0涉及的一些常用概念进行介绍,然后直接通过一个DEMO来让大家切身感受了OAuth2.0第 ...

随机推荐

  1. 51单片机C51毫秒级(ms)精确延时

    如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; ;j--) ;i>;i--); } 用keil可以看出 ...

  2. COJ 0036 数数happy有多少个?

    数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...

  3. Linux系统编程(37)—— socket编程之原始套接字

    原始套接字的特点 原始套接字(SOCK_RAW)可以用来自行组装IP数据包,然后将数据包发送到其他终端.也就是说原始套接字是基于IP数据包的编程(SOCK_PACKET是基于数据链路层的编程).另外, ...

  4. Android读取Assert文件夹下txt文本并变为String的方法

    使用场景,在assert文件夹下 有些文本文件,我们需要通过工具类读取出来,然后放到String字符串中,我们该如何操作呢: 直接上代码: 使用方法: MyActivity.readAssertRes ...

  5. shellAPP

    1,linux操作日志记录,记录从各个ip登陆到系统的账号,指向命令及命令执行时间 #!/bin/bashecho "export PROMPT_COMMAND='{ msg=\$(hist ...

  6. ORA-00314,redolog 损坏,或丢失处理方法

    alertsid.log报错信息: Fri Sep 27 15:18:39 2013 Started redo scan Fri Sep 27 15:18:39 2013 Errors in file ...

  7. es6新特性:

    http://es6katas.org/ es6+一些新特性,截图如下 对应方法,函数显示相关的数据,如图: 对应方法,函数的例子,如下

  8. (转)iOS 各种控件默认高度(图示)

    1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明 ...

  9. NPM与调试工具的使用

    1)NPM 2)nodemon 自动监视文件的变化并重启应用 3)pm2 启动node,资源共享 4)node-inspector node调试工具 5)Chrome Developer Tools

  10. getClass 与getSimpleName

    //首先定义一个借口 package com.test; public interface Fruit { } //定义一个实现类 package com.test; public class App ...