新浪微博android应用开发学习

     在学习做一款新浪的微博android应用的时候遇到了很多问题,因为没开发过,有很多不懂得地方去百度,网上有很多开发微博的参考文章和代码,但是发现这些文章都比较久了,新浪微博的授权机制已经是OAuth2.0。和之前的用法多少不一样。于是自己慢慢看新浪给的示例代码,周折很久终于给弄出来了。写下来供也想做微博的新手朋友参考,别走那么多弯路,顺便自己也备忘一下。

第一步:去新浪微博开放平台创建应用,这跟以前是差不多的,很多文章都有写。

第二步:几个重要的项一定要填。即“Android包名”、“Android签名”、“授权回调地址”。(如果没见到这几个项多在新浪微博平台应用管理那个地方到处找找就能看见了)。

1.                       2.    

“Android包名”就是你所开发的应用的包名,

“Android签名”需要一个工具点击这里下载,把它装到手机或模拟器中打开,输入你的应用的包名就可以生成签名码了。(这里注意,你的手机或模拟器里已经安装了你的应用才能获得签名字符串,你可以在刚建好项目的时候再手机或模拟器上运行一次就可以了。)

“授权回调地址” 后面是要用到它的,不过可以随便填一个网址就可以了。"取消授权回调地址“   跟   ”授权回调地址“     填同一个。

第三步:创建好应用之后,下载新浪的androidSDK,把里面的 libs目录下的weibosdkcode.jar文件拷到自己项目下的libs文件夹下。

第四步:代码,实现非常简单的获取微博功能。

1.Constans

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Constants {  
  2.      public static final String APP_KEY      = "你的应用的APP_KEY";  
  3.      public static final String REDIRECT_URL = "你填的授权回调地址";  
  4.     public static final String SCOPE="public_timeline";  
  5.     /** 
  6.      * Scope 是 OAuth2.0 授权机制中 authorize 接口的一个参数。通过 Scope,平台将开放更多的微博 
  7.      * 核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新 OAuth2.0 授权页中有权利 
  8.      * 选择赋予应用的功能。 
  9.      *  
  10.      * 我们通过新浪微博开放平台-->管理中心-->我的应用-->接口管理处,能看到我们目前已有哪些接口的 
  11.      * 使用权限,高级权限需要进行申请。 
  12.      *  
  13.      * 目前 Scope 支持传入多个 Scope 权限,用逗号分隔。 
  14.      *  
  15.      * 有关哪些 OpenAPI 需要权限申请,请查看:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI 
  16.      * 关于 Scope 概念及注意事项,请查看:http://open.weibo.com/wiki/Scope 
  17.      */  
  18. }  

2.MainActivity.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class CopyOfMainActivity extends Activity {  
  2.     /** 微博 Web 授权类,提供登陆等功能  */  
  3.     private WeiboAuth mWeiboAuth;  
  4.     /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能  */  
  5.     private Oauth2AccessToken mAccessToken;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.         mWeiboAuth = new WeiboAuth(CopyOfMainActivity.this, Constants.APP_KEY,  
  12.                 Constants.REDIRECT_URL, Constants.SCOPE);  
  13.         mWeiboAuth.anthorize(new AuthListener());  
  14.   
  15.     }  
  16.   
  17.       
  18.   
  19.     class AuthListener implements WeiboAuthListener {  
  20.   
  21.         @Override  
  22.         public void onComplete(Bundle values) {  
  23.             // 从 Bundle 中解析 Token  
  24.             mAccessToken = Oauth2AccessToken.parseAccessToken(values);  
  25.             if (mAccessToken.isSessionValid()) {  
  26.                 //授权成功,启动线程  
  27.                 Thread t = new MyThread(mAccessToken.getToken());  
  28.                 t.start();  
  29.             } else {  
  30.                 // 当您注册的应用程序签名不正确时,就会收到 Code,请确保签名正确  
  31.                 String code = values.getString("code");  
  32.                 String message = "授权失败";  
  33.                 if (!TextUtils.isEmpty(code)) {  
  34.                     message = message + "\nObtained the code: " + code;  
  35.                     System.out.println(message);  
  36.                 }  
  37.                 Toast.makeText(CopyOfMainActivity.this, message,  
  38.                         Toast.LENGTH_LONG).show();  
  39.             }  
  40.         }  
  41.   
  42.         @Override  
  43.         public void onCancel() {  
  44.             Toast.makeText(CopyOfMainActivity.this"取消授权", Toast.LENGTH_LONG)  
  45.                     .show();  
  46.         }  
  47.   
  48.         @Override  
  49.         public void onWeiboException(WeiboException e) {  
  50.             Toast.makeText(CopyOfMainActivity.this,  
  51.                     "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)  
  52.                     .show();  
  53.         }  
  54.     }  
  55.   
  56.       
  57.     class MyThread extends Thread {  
  58.         public MyThread(String token) {  
  59.             this.token = token;  
  60.         }  
  61.         private String token;  
  62.   
  63.         public void run() {  
  64.             //利用token获取微博  
  65.             String path = "https://api.weibo.com/2/statuses/friends_timeline.json?access_token="  
  66.                     + token;  
  67.             try {  
  68.                 URL url = new URL(path);  
  69.                 HttpURLConnection conn = (HttpURLConnection) url  
  70.                         .openConnection();  
  71.                 conn.setRequestMethod("GET");  
  72.                 conn.setConnectTimeout(10000);  
  73.                 conn.setReadTimeout(10000);  
  74.                 int code = conn.getResponseCode();  
  75.                 if (code == 200) {  
  76.                     InputStream is = conn.getInputStream();  
  77.                     InputStreamReader isr = new InputStreamReader(is);  
  78.                     BufferedReader br = new BufferedReader(isr);  
  79.                     StringBuffer sb = new StringBuffer();  
  80.                     String temp = "";  
  81.                     while ((temp = br.readLine()) != null) {  
  82.                         sb.append(temp);  
  83.                     }  
  84.                     JSONArray jsonarr = new JSONObject(sb.toString())  
  85.                             .getJSONArray("statuses");  
  86.                     for (int i = 0; i < jsonarr.length(); i++) {  
  87.                         JSONObject json = (JSONObject) jsonarr.opt(i);  
  88.                         String time = (String) json.get("created_at");  
  89.                         String text = (String) json.get("text");  
  90.                         JSONObject j = (JSONObject) json.get("user");  
  91.                         String username = (String) j.get("name");  
  92.                         System.out.println("---------这是一条微博----------->");  
  93.                         System.out.println("****发表人:" + username + "****时间:"  
  94.                                 + time + "****");  
  95.                         System.out.println("内容:");  
  96.                         System.out.println(text);  
  97.                     }  
  98.                 } else {  
  99.                     System.out.println("->code=" + code);  
  100.                 }  
  101.   
  102.             } catch (Exception e) {  
  103.                 System.out.println("error");  
  104.                 e.printStackTrace();  
  105.             }  
  106.   
  107.         }  
  108.     }  
  109. }  

3.权限声明

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2.    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  3.    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  4.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

最终结果:



在MainActivity类代码中会有一个地址:https://api.weibo.com/2/statuses/friends_timeline.json 作为URL对象的地址,这个是获得微博的一个接口,还有其他写微博,评论的接口等等在新浪微博API文档里面都有。变通一下就可以实现其他的功能了。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值