android 腾讯微博开发 OAuth认证(一):获取请求指令RequeToken

2023-11-10

第一步:下载腾讯微博SDK

第二步:创建Android项目,并配置Build Path,加入SDK中httpmime-4.1.3.jar、Android_SDK_v1.2.jar的源文件(里面包含错误需要自己进行相关的修改)两个库文件

 

相关截图:

 

 

源代码:

package com.rf.qqweixun;

import com.tencent.weibo.oauthv1.OAuthV1;
import com.tencent.weibo.oauthv1.OAuthV1Client;
import com.tencent.weibo.utils.QHttpClient;
import com.tencent.weibo.webview.OAuthV1AuthorizeWebView;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {
	// 相关组件
	private Button start;
	private Button webview;
	private TextView content;
	private Intent intent;
	// 相关OAuth资源http://www.tencent.com/zh-cn/index.shtml||http://blog.csdn.net/zhouzhiwengang
	// !!!请根据您的实际情况修改!!! 认证成功后浏览器会被重定向到这个url中 本例子中不需改动
	private String oauthCallback = "http://write.blog.csdn.net/postlist";
	// !!!请根据您的实际情况修改!!! 换为您为自己的应用申请到的APP KEY
	private String oauthConsumeKey = "801405166";
	// !!!请根据您的实际情况修改!!! 换为您为自己的应用申请到的APP SECRET
	private String oauthConsumerSecret = "2a2577742611abe65329e513ae3e2281";
	private OAuthV1 oAuth; // Oauth鉴权所需及所得信息的封装存储单元

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		start = (Button) findViewById(R.id.start);
		content = (TextView) findViewById(R.id.content);
		// OAuth1认证初始化
		oAuth = new OAuthV1(oauthCallback);
		oAuth.setOauthConsumerKey(oauthConsumeKey);
		oAuth.setOauthConsumerSecret(oauthConsumerSecret);

		// 关闭OAuthV1Client中的默认开启的QHttpClient。
		OAuthV1Client.getQHttpClient().shutdownConnection();
		// 为OAuthV1Client配置自己定义QHttpClient。
		OAuthV1Client.setQHttpClient(new QHttpClient());

		start.setOnClickListener(new OnClickListener() {
			// 应用获取未授权的Request Token
			@Override
			public void onClick(View v) {
				// 向腾讯微博开放平台请求获得未授权的Request_Token
				try {

					oAuth = OAuthV1Client.requestToken(oAuth);
					String oauthToken = oAuth.getOauthToken();
					String oauthToken_Secret = oAuth.getOauthTokenSecret();
					System.out.println("Token的值:" + oauthToken);
					System.out.println("Token_Secret的值:" + oauthToken_Secret);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("相关信息:" + e.getMessage());
				}
				// 未授权的Request Token
				// Toast.makeText(MainActivity.this,
				// "未授权的Request_Token:"+oAuth.getOauthToken()+"\n"+oAuth.getOauthTokenSecret(),
				// Toast.LENGTH_LONG).show();
				content.setText("未授权的Request_Token:" + oAuth.getOauthToken()
						+ "\n" + oAuth.getOauthTokenSecret());
			}

		});

		webview = (Button) findViewById(R.id.webview);
		webview.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				intent = new Intent(MainActivity.this,
						OAuthV1AuthorizeWebView.class);// 创建Intent,使用WebView让用户授权
				intent.putExtra("oauth", oAuth);
				startActivityForResult(intent, 1);

			}

		});

	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == 1) {
			if (resultCode == OAuthV1AuthorizeWebView.RESULT_CODE) {
				// 从返回的Intent中获取验证码
				oAuth = (OAuthV1) data.getExtras().getSerializable("oauth");
				// 用户授权Request Token
				Toast.makeText(MainActivity.this,
						"用户授权的Request_Token:" + oAuth.getOauthVerifier(),
						Toast.LENGTH_LONG).show();

			}
		}
	}

}



配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.rf.qqweixun"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.rf.qqweixun.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.tencent.weibo.webview.OAuthV1AuthorizeWebView" >
        </activity>
    </application>
    <!-- 应用程序的相关权限 -->
    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

 

修改SDK_1.2源代码:[com.tencent.weibo.utils.QHttpClient]

   public String httpGet(final String url, final String queryString) throws Exception {

       new Thread(){

		@Override
		public void run() {
			// TODO Auto-generated method stub
//			  if (queryString != null && !queryString.equals("")) {
//		            url=url +"?" + queryString;
//		        }
		        Log.i(TAG, "QHttpClient httpGet [1] url = "+url);

		        HttpGet httpGet = new HttpGet(url +"?" + queryString);
		        httpGet.getParams().setParameter("http.socket.timeout",
		                new Integer(CONNECTION_TIMEOUT));
		        try {
		            HttpResponse response=httpClient.execute(httpGet);
		            Log.i(TAG, "QHttpClient httpGet [2] StatusLine : "+ response.getStatusLine());
		            responseData =EntityUtils.toString(response.getEntity());
		            Log.i(TAG, "QHttpClient httpGet [3] Response = "+ responseData);
		        } catch (Exception e) {
		            e.printStackTrace();
		        } finally {
		            httpGet.abort();
		        }

		}
    	   
    	   
       }.start();
      
        return responseData;
    }




 

效果截图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 腾讯微博开发 OAuth认证(一):获取请求指令RequeToken 的相关文章

  • 脚本收集服务器信息,shell脚本批量收集linux服务器的硬件信息快速实现

    获取默认IP default ip ifconfig head n 2 tail n 1 cut d f 2 cut d f 1 获取产品的名称 如果是简化版的linux系统 需要先安装dmidecode工具包 product name d
  • java高并发的处理--锁机制

    对于我们开发的网站 如果网站的访问量非常大的话 那么我们就需要考虑相关的并发访问问题了 而并发问题是绝大部分的程序员头疼的问题 但话又说回来了 既然逃避不掉 那我们就坦然面对吧 今天就让我们一起来研究一下常见的并发和同步吧 为了更好的理解并
  • phpstudy小皮 sqli-libs 靶场搭建

    sqli libs靶场搭建 1 下载靶场 sqli labs mster https github com Audi 1 sqli labs archive refs heads master zip 解压 2 下载 安装 phpstudy
  • Python(解非线性方程和线性方程)求水力学法向深度-浪涌高度速度及互连反应器中的浓度和流体分布

    非线性方程 在水力学领域遇到的非线性方程的一个例子是通过长梯形通道寻找流动的法向深度 y n y n yn 这样的流动深度出现在均匀流动区域 远离任何不均匀原因的影响 例如堰的上游 法向深度 y
  • 《GPT-4技术报告》【中文版、英文版下载】

    大预言模型时代已经到来 但是真正的智能之路还很长 一 以下是连接 大家请自取 英文原版 https arxiv org pdf 2303 08774 pdfhttps arxiv org pdf 2303 08774 pdf 中文翻译版本
  • 最大信息系数mic python_生物信息学

    论文剖析 热门论文 AgeGuess 一种预测人类年龄的甲基化模型 1 介绍 衰老是一个生物过程 受到遗传因子和细胞内各种分子修饰的影响 多项研究表明 使用甲基组数据可以准确预测实际年龄 本篇文章针对年龄回归问题 提出了一种三步特征选择算法
  • 【SpringBoot】pom中的变量

    在Maven项目的pom xml文件中 可以使用多个预定义变量 以下是一些常用的变量 project basedir 项目根目录的绝对路径 project build directory 构建目录的绝对路径 通常为target projec
  • mybatis_plus

    目录 一 简介 二 特性 三 快速入门 一 创建并初始化数据库 1 创建数据库 2 创建 User 表 二 初始化工程 三 添加依赖 1 引入依赖 2 idea中安装lombok插件 四 配置 五 编写代码 1 主类 2 实体 3 mapp
  • [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.(入职小灰)

    mariadb剧本安装后自动重启不了 飞要一次手动重启 这对于重要业务来说是致命的 今天遇到的错误 ERROR Can t open the mysql plugin table Please run mysql upgrade to cr
  • threejs教程(一)

    插件安装 npm i three 项目引入 这里我随便找的VUE项目练习的 import as THREE from three 大致介绍一下threejs的逻辑 一般我们用它是来搭建三维模型的 搭建三维模型就需要的三个要素 场景 scen
  • 【Xilinx Vivado 时序分析/约束系列11】FPGA开发时序分析/约束-FPGA DDR-PLL接口的 input delay 约束优化方法

    目录 DDR PLL 简述 实际操作 实际工程 顶层代码 PLL配置 添加时钟约束 添加 input delay 约束 添加 False Path Setup Time Hold Time Multicycle约束 解决办法 PLL配置 发
  • css transition 实现滑入滑出

    transition是css最简单的动画 通常当一个div属性变化时 我们会立即看的变化 从旧样式到新样式是一瞬间的 嗖嗖嗖 但是 如果我希望是慢慢的从一种状态 转变成另外一种状态 怎么办 transition可以做到 第一问 哪些属性值变
  • 电脑连着无线wifi(外网)和有线内网,如何实现双网访问?

    做交付难免会遇到 需要开发远程解决问题 但是客户方是内网 开发无法远程 因为自己遇到很多次 记性又差 所以就写着给自己看看 以管理员身份运行命令提示符 场景描述 访问地址 http 172 31 27 15 内网必须要可以访问这个地址 内网
  • CUID卡写入错误数据被锁死——入坑NFC的一段经历

    最开始想到做NFC是还在学校上自习的时候 学校有种氛围很好的自习室 每个位置都是一个小隔间 小隔间里还有小灯和插座以及网线口 但是需要插卡取电 对就是用很普通的那种校园卡插进去就有电了 这个校园卡是NFC卡 但是学校很nt的一点是只有上一届
  • vue 项目中通过监听 localStorage 的变化进行父子页面传参

    vue实时监听 localStorage 变化 应用场景 1 页面B需要实时获取页面A数据更改 2 父子页面之间的传参 代码实例 B页面实时获取A页面的数据变化 在 页面A 进行缓存修改or插入缓存 localStorage setItem
  • MySQL8.0_JDBC笔记

    第一章 JDBC概述 之前我们学习了JavaSE 编写了Java程序 数据保存在变量 数组 集合等中 无法持久化 后来学习了IO流可以将数据写入文件 但不方便管理数据以及维护数据的关系 后来我们学习了数据库管理软件MySQL 可以方便的管理
  • Java对象的生命周期

    Java对象的生命周期 Java语言除了原始数据类型外 还有一种类型被称之为引用类型 对象的创建一般需要使用new关键字 将创建的对象存储在堆上 heap 而在线程栈中会保留一个指向堆上地址的引用 下图将展示堆栈之间的具体关系 栈中被分割成
  • [UE4] C++实现Delegate Event实例(例子、example、sample)

    相关文章 如何用蓝图实现Delegate Event http aigo iteye com blog 2269663 原文作者 玄冬Wong 转载请注明出处 http aigo iteye com blog 2301010 虽然官方doc
  • 数据库实验3-单表查询

    2021011203 1 查询全体学生的姓名 出生年份和所在系 2 查询选修了课程的学生学号 SELECT DISTINCT sno FROM scfcy WHERE cno IS NOT NULL distinct去除重复的 从名为scf

随机推荐

  • Python 循环嵌套

    Python 语言允许在一个循环体里面嵌入另一个循环 Python for 循环嵌套语法 for iterating var in sequence for iterating var in sequence statements s st
  • 有什么职业入行时间短,薪资高?

    有什么职业入行时间短 薪资高 1 可以通过短期 半年以内 的学习入行 2 入职后 排除运气等不可控因素 能拿到 10k 以上 百分之十的人能做到就算 3 工作期间晚上有极其充足的生物钟休息时间 4 能用脑子解决的事情别用体力 说到入行时间短
  • 收集金币(人人网笔试)

    题目描述 小M来到了一个迷宫中 这个迷宫可以用一个N M的矩阵表示 在这个迷宫的某些位置中存在金币 一开始小M在迷宫的入口 矩阵的左上角 位置 1 1 处 迷宫的出口位于矩阵的右下角 位置 N M 处 每一次小M可以选择向下或者向右走到一个
  • const 指针 常量指针 指针常量 常量指针常量

    常量指针 指向常量的指针 在指针定义语句的类型前加const 表示该指针指向一个常量 const int a 666 const int p a 常量a只能被访问而不能被改写 但指向常量a的常量指针可以改写 指针常量 在指针定义语句的指针名
  • LeetCode-从尾到头打印链表

    用vector的reverse函数实现翻转hh Definition for singly linked list struct ListNode int val ListNode next ListNode int x val x nex
  • 解决Unable to find vcvarsall.bat问题

    目录 前言 方法1 方法2 前言 用Windows平台做Python开发时 难免会遇到Unable to find vcvarsall bat错误 我在网上疯搜了一段时间之后 才找到解决办法 还是两个 不想装VS的朋友可以用第二个 方法1
  • winows搭建远程仓库Github(linux通用)

    winows搭建远程仓库Github linux通用 文章目录 winows搭建远程仓库Github linux通用 创建远程仓库 配置SSH 克隆项目 多人协同开发 代码冲突 标签 分支 创建远程仓库 以下操作为演示在Github网站上创
  • dubbo解析-详解元数据中心MetadataReport

    本文基于dubbo 2 7 5版本代码 详解元数据中心MetadataReport 一 配置 二 注册中心参数simplified原理 三 元数据中心 1 AbstractMetadataReport 1 publishAll 2 stor
  • 计算机复习6----码分多址CDMA计算

    该部分知识位于书P57 看题 解法 将 A B C D每个的码片与收到的码片序列 逐个进行乘法 例 1 将A中第一位 1与S中第一位 1 相乘 得 1 2 第二位 1 1 1 以此类推 3 得 1 1 3 1 1 3 1 1 4 对所得 相
  • 在Java中使用tabula提取PDF中的表格数据

    问题 如何将pdf文件中指定的表格数据提取出来 尝试过的工具包有 pdfbox tabula 最终选用tabula 两种工具的比较 pdfbox 其中 pdfbox能将pdf中的内容直接提取成String 代码片段 public stati
  • 梦断代码阅读笔记01

    以前的我很难理解软件时间这个问题 以为就是敲代码的时间总和就是 因为以前的我在做项目的时候没有计划 直接上来就是敲 没有任何预估 但是读完这本书的前一部分发现 我以前真是太愚昧了 真正的项目不单单是敲代码 反而敲代码占得比例还不是很大 而主
  • C++内存泄漏及解决办法

    1 C 内存泄漏是什么 内存泄漏指的是由于疏忽或错误造成了程序未能释放掉不再使用的内存 2 造成的后果 性能不良 内存会耗尽 3 C 没有垃圾回收机制 我们需要关注那些类型的内存泄漏 堆内存泄漏 在内存中程序员手动分配的一块内存 mallo
  • IDEA将java项目打包为jar包

    方法 首先在src gt resources目录下建立一个文件夹 然后再在新建文件夹里面建立META INF文件夹 不推荐直接建立META INF 否则后面打包完的jar包需要手动修改配置 然后点击File gt Project Struc
  • R - 简单随机抽样

    本文使用的包 library tidyverse library moderndive 使用的数据集 总共有2400个红球和白色球 bowl 此处采用简单随机抽样 从2400个球中估算出红球所占比例 采用不同的抽取方法 一组是一次性抽取30
  • 使用docker搭建自己的jupyterhub多用户服务器

    1 选择基础镜像 这里我们选择jupyterhub的官方镜像 docker pull jupyterhub jupyterhub 2 启动容器 docker run p 8000 8000 d name jupyterhub jupyter
  • EndnoteX7/8/9参考文献不按顺序出现

    1 问题 EndNote插入文献序号正文的文献引用和后面的序号都能一一对上 但是正文中的排序并不按照行文顺序来 好尴尬 其实出版论文里有不按 1 2 3 顺序出现的文章 不过大多是严格按 1 2 3 顺序的文章 换句话说也就是说EndNot
  • Git 之 上传本地仓库到远程仓库

    文章目录 需求 切记 新建远程仓库 添加ssh key 在本地建立仓库 添加文件 git remote add git add git commit git push 参考连接 需求 建立远程仓库 在本地建立工程及仓库 将本地仓库push到
  • (二)zookeeper实战——zookeeper集群搭建

    前言 本节内容我们主要介绍一下如何在centos系统下搭建一套高可用的zookeeper集群 zookeeper是我们常用的中间键之一 例如使用zookeeper实现分布式锁 Hadoop集群高可用 kafka集群高可用等等 我们以以下三台
  • OD动调之脱壳:使用ESP定律寻找

    OD动调之脱壳 使用ESP定律寻找 using OD F8 sigle step Until stop Then data window follow Block then F9 Jmp gt oep 401171 You can unpa
  • android 腾讯微博开发 OAuth认证(一):获取请求指令RequeToken

    第一步 下载腾讯微博SDK 第二步 创建Android项目 并配置Build Path 加入SDK中httpmime 4 1 3 jar Android SDK v1 2 jar的源文件 里面包含错误需要自己进行相关的修改 两个库文件 相关