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

第一步:

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

二:

//创建方法实现authorize
public void getauthorize(){
//获取实例
//实例化的方法一般有三种
//1.最常见的通过new;2.通过getinstence;3.通过工厂(Facetory)
Weibo weibo=Weibo.getInstence();//里面有三个参数.String appKey, String redirectUrl, String aScope,
//分别是你应用的appKey,网址,想要获取的权限可以把这些属性写在一个类里面设置成静态
//这里需要两个参数,一个为context,一个listenr
//context很好解决放的就是this,而listener需要的是WeiboAuthListener类型,我们没有所有就直接new一个
weibo.aututhorize(this,new WeiboAuthListener(){
//WeiboAuthListener里面自动生成4个方法
//抛出异常时
@Override
public void onWeiboException(WeiboException arg0) {
Log.d(TAG, "onWeiboException" + arg0); } // 出错时
@Override
public void onError(WeiboDialogError arg0) {
Log.d(TAG, "onError" + arg0); } // 成功时
@Override
public void onComplete(Bundle arg0) {//这里的Bundle arg0就是返回的code数据
Log.d(TAG, "onComplete" + arg0);
String code = arg0.getString("code");
//这是获得Toak的方法,在下面会写到
getToken(code);
} // 取消时
@Override
public void onCancel() {
Log.d(TAG, "onCancel====="); } });
}

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

//实现access_token获取已经授权的Access_token

public void getToken(){
//现在来填充参数
String url="https://api.weibo.com/oauth2/access_token";//注意这里不能有空格
WeiboParameters params=new WeiboParameters();
//params的中文就是参数的意思,所有将参数放在里面,所需的请求参数新浪API里面都有http://open.weibo.com/wiki/OAuth2/access_token
params.add("client_id", staticname.AppKey);//第一个是key,第二个是value
params.add("client_secret", staticname.App_Secret);
params.add("grant_type", "authorization_code");
params.add("code", code);
params.add("redirect_uri", staticname.RedirectUrl); //第一步先写下面这个
AsyncWeiboRunner.request(url,params,"POST",new RequestListener(){
//自动生成四个方法
@Override
public void onIOException(IOException arg0) {
Log.d(TAG, "onIOException------" + arg0); } @Override
public void onError(WeiboException arg0) {
Log.d(TAG, "onError------" + arg0); } @Override
public void onComplete4binary(ByteArrayOutputStream arg0) {
Log.d(TAG, "onComplete4binary------" + arg0); } @Override
public void onComplete(String js) {// 得到Toak的就是js
Log.d(TAG, "onComplete------" + js);
//这里json解析的作用下面会讲到
Json json = new Json();
try {
json.pramas(js, Welcom.this);
handler.sendEmptyMessage(CODE_VIEWPAGER);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} )};//这里需要四个参数分别是String url, WeiboParameters params, String httpMethod, RequestListener listener
//第一个参数代表是新浪API里的所给网站,第二,四个参数没有和上面的方法一样new出来,第三个参数新浪API同样给出了是POST }

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

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

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

Json.class

 //新建一个类来存储数据
public class Sharde(){ public void putToken(Context context,String token,long expires_in){
//要使用context调用get来获取SharedPreferences,而json里要使用此方法,所以json里面也要有context
SharedPreferences preferences=context.getSharedPreferences("token",SharedPreferences.Moden_PRI);//第一个是SharedPreferences的名字,第二个是数据存储形式
Editor editor= preferences.edit();
editor.putString("token",token);//因为这要放token的值所以要在方法里写上
editor.putLong("expires_in",expires_in);
//这个不要忘了
editor.commt;
}
public void putuid(Context context,String uid){
SharedPreferences preferences=context.getSharedPreferences("uid",SharedPreferences.Moden_PRI);
Editor editor= preferences.edit();
editor.putString("token",token);
//这个不要忘了
editor.commt;
}
//将SharedPreferences,的数据拿出来,以供判断使用
public Oauth2AccessToken getToken(){
SharedPreferences preferences=context.getSharedPreferences("token",SharedPreferences.Moden_PRI);
String token = preferences.getString("token", null);//第二个参数是默认值的意思
long expires_in = preferences.getLong("expires_in", 0);
return new Oauth2AccessToken(token,expires_in+"") ;//返回Token,里面不能放long型所以要转成String型
} public String getuid(){
SharedPreferences preferences = context.getSharedPreferences("uid",
context.MODE_PRIVATE);
String uid = preferences.getString("uid", null);
return uid;
} }

Sharde.class

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

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

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

 <uses-permission android:name="android.permission.INTERNET" />
<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. 热爱工作 发财机会大增(这里不是选择软件还是硬件的问题,是自己的性格和追求的问题)——当你的老板不如你懂行的时候,还赚的盆满钵满的时候,你就可以考虑独立了 good

    爱工作 发财机会大增 [ 油老板 ] 于:2011-02-09 06:39:41 复:1269077 认真回顾发主贴以来的三年半,俺觉得对于想发财的上班族来说,认真工作,刻苦钻研是发财的重要保证. 为 ...

  2. Linux下如何发布Qt程序

    在X11平台下qt程序,首先准备好程序中需要使用的资源,库和插件...    比如你的可运行程序取名叫作panel,那把你的panel,那些libQt*.so.4和libQt*.so.4.6.0(链接 ...

  3. poj2114 Boatherds

    Description Boatherds Inc. is a sailing company operating in the country of Trabantustan and offerin ...

  4. Windows 注册表操作

    经常操作注册表,然后得到一份操作注册表函数实现.这里备份下. #ifndef _REGEDIT_H #define _REGEDIT_H int RegRead_S (struct HKEY__*Re ...

  5. Cplus

    1,factorials[i] = i * factorials[i - 1]; #include <iostream>using namespace std; const int ArS ...

  6. Appium依据xpath获取控件实例随笔

    如文章<Appium基于安卓的各种FindElement的控件定位方法实践>所述,Appium拥有众多获取控件的方法.当中一种就是依据控件所在页面的XPATH来定位控件. 本文就是尝试通过 ...

  7. ZOJ 3511 不相交切切多边形 线段树求最大边数

    题意: n多凸边形 m刀 (把n切m刀,问切完后的图形中 最多的边数 是多少) 切a点-b点 数据保证切的刀不会相交 思路: 2点之间的剩余点数就是边数, 把a-b距离 近 排序 切完一刀就统计一下切 ...

  8. uva 11825 Hackers&#39; Crackdown (状压dp,子集枚举)

    题目链接:uva 11825 题意: 你是一个黑客,侵入了n台计算机(每台计算机有同样的n种服务),对每台计算机,你能够选择终止一项服务,则他与其相邻的这项服务都终止.你的目标是让很多其它的服务瘫痪( ...

  9. iOS、mac开源项目及库(感谢原作者的分享)

    目录 模糊效果 富文本 表相关 HUD与Toast 其他UI 其他动画 网络测试 网络聊天 Model 数据库 PDF 摄像照相视频音频处理 消息相关 消息推送服务器端 版本新API的Demo 测试及 ...

  10. Web的工作机制

    简要的介绍一下Web的工作机制,以便对开发JavaWeb项目有个更好的理解. 一.Web的概念     1.1    何为Web:Web是万维网(World Wide Web)的简称.Web出现以前, ...