新浪微博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

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开