新浪微博android应用开发学习

2024-06-07 10:58

本文主要是介绍新浪微博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文档里面都有。变通一下就可以实现其他的功能了。




这篇关于新浪微博android应用开发学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038986

相关文章

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部