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

相关文章

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个