2.腾讯微博Android客户端开发——Parameter类和SyncHttp类编写

Android系统10 RK3399 init进程启动(十) parameter.txt 文件详解 配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 在uboot启动,以及生成的所有镜像文件中, 有一个parameter.txt文件, 这个文件通过名字就知道, 参数文件, 肯定是和定制化和启动有关, 学习他很有必有, 本章重点介绍parameter.txt里的内容。 一,简介 ls rockdev/Image-rk3... 阅读详情

在上一节介绍的OAuth认证过程中我们可以看到我们需要不断地和腾讯微博开放平台进行数据的交互,因此我们需要编写一个类用来发送Http请求,并且能处理平台返回过来的数据。学习Html的朋友应该知道Get和Post两种方式提交数据,在这里我们同样也需要编写Post和Get两个方法模拟Post和Get请求。在发送微博时我们还可以上传照片,所以我们还应编写一个方法用于上传图片,但是在这里暂时还不编写上传数据的方法。另外在模拟Http请求时我们需要传递参数,因此我们需创建一个Parameter类,表示参数对象。在腾讯微博开放平台中关于oauth_signature参数值的产生过程介绍中有这样一幅描述图(http://open.t.qq.com/resource.php?i=1,2#tag0 )

我们可以看到参数对象是需要进行排序的,这里的排序是参数按name进行字典升序排列,详细介绍我们可以参考这篇介绍:http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91%E7%AD%BE%E5%90%8D%E5%8F%82%E6%95%B0oauth_signature%E7%9A%84%E8%AF%B4%E6%98%8E。因此我们需让我们的Parameter类实现 Comparable<T>接口,重写里面的方法,最终Parameter类代码如下: 

package com.szy.weibo.model;
import java.io.Serializable;
/**
 *@author coolszy
 *@date 2011-5-29
 *@blog http://blog.youkuaiyun.com/coolszy
 */
public class Parameter implements Serializable, Comparable<Parameter> 
{
	private static final long serialVersionUID = 2721340807561333705L;
	
	private String name;//参数名
	private String value;//参数值

	public Parameter()
	{
		super();
	}

	public Parameter(String name, String value)
	{
		super();
		this.name = name;
		this.value = value;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getValue()
	{
		return value;
	}

	public void setValue(String value)
	{
		this.value = value;
	}

	@Override
	public String toString()
	{
		return "Parameter [name=" + name + ", value=" + value + "]";
	}

	@Override
	public boolean equals(Object arg0)
	{
		if (null == arg0)
		{
			return false;
		}
		if (this == arg0)
		{
			return true;
		}
		if (arg0 instanceof Parameter)
		{
			Parameter param = (Parameter) arg0;

			return this.getName().equals(param.getName()) && this.getValue().equals(param.getValue());
		}
		return false;
	}

	@Override
	public int compareTo(Parameter param)
	{
		int compared;
		compared = name.compareTo(param.getName());
		if (0 == compared)
		{
			compared = value.compareTo(param.getValue());
		}
		return compared;
	}
}

     模拟发送Http请求我们可以使用HttpURLConnection类进行操作,但是Android平台集成了功能强大且编写更容易的commons-httpclient.jar,因此在这里介绍如何通过commons-httpclient进行Http请求。发送Http请求可以有两种方式:一种是同步,一种是异步。由于我对异步不是很熟悉,所以这里先提供同步方式发送Http请求:

package com.szy.weibo.service;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.szy.weibo.model.Parameter;

/**
 *@author coolszy
 *@date 2011-5-29
 *@blog http://blog.youkuaiyun.com/coolszy
 */

/**
 * 以同步方式发送Http请求
 */
public class SyncHttp
{
	private static final Log LOG = LogFactory.getLog(SyncHttp.class);
	
	private static final int CONNECTION_TIMEOUT = 1000 * 5; // Http连接超时时间

	/**
	 * 通过GET方式发送请求
	 * @param url URL地址
	 * @param params 参数
	 * @return 
	 * @throws Exception
	 */
	public String httpGet(String url, String params) throws Exception
	{
		String response = null; //返回信息
		if (null!=params&&!params.equals(""))
		{
			url += "?" + params;
		}
		// 构造HttpClient的实例
		HttpClient httpClient = new HttpClient();
		// 创建GET方法的实例
		GetMethod httpGet = new GetMethod(url);
		// 设置超时时间
		httpGet.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT));
		try
		{
			int statusCode = httpClient.executeMethod(httpGet);
			if (statusCode == HttpStatus.SC_OK) //SC_OK = 200
			{
				InputStream inputStream = httpGet.getResponseBodyAsStream(); //获取输出流,流中包含服务器返回信息
				response = getData(inputStream);//获取返回信息
			}
			else
			{
				LOG.debug("Get Method Statuscode : "+statusCode);
			}
		} catch (Exception e)
		{
			throw new Exception(e);
		} finally
		{
			httpGet.releaseConnection();
			httpClient = null;
		}
		return response;
	}

	/**
	 * 通过POST方式发送请求
	 * @param url URL地址
	 * @param params 参数
	 * @return
	 * @throws Exception
	 */
	public String httpPost(String url, List<Parameter> params) throws Exception
	{
		String response = null;
		HttpClient httpClient = new HttpClient();
		PostMethod httpPost = new PostMethod(url);
		//Post方式我们需要配置参数
		httpPost.addParameter("Connection", "Keep-Alive");
		httpPost.addParameter("Charset", "UTF-8");
		httpPost.addParameter("Content-Type", "application/x-www-form-urlencoded");
		httpPost.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT));
		if (null!=params&¶ms.size()!=0)
		{
			//设置需要传递的参数,NameValuePair[]
			httpPost.setRequestBody(buildNameValuePair(params));
		}
		try
		{
			int statusCode = httpClient.executeMethod(httpPost);
			if (statusCode == HttpStatus.SC_OK)
			{
				InputStream inputStream = httpPost.getResponseBodyAsStream();
				response = getData(inputStream);
			}
			else
			{
				LOG.debug("Post Method Statuscode : "+statusCode);
			}
		} catch (Exception e)
		{
			throw new Exception(e);
		} finally
		{
			httpPost.releaseConnection();
			httpClient = null;
		}
		return response;
	}
	
	/**
	 * 构建NameValuePair数组
	 * @param params List<Parameter>集合
	 * @return
	 */
	private NameValuePair[] buildNameValuePair(List<Parameter> params)
	{
		int size = params.size();
		NameValuePair[] pair = new NameValuePair[size];
		for(int i = 0 ;i<size;i++)
		{
			Parameter param = params.get(i);
			pair[i] = new NameValuePair(param.getName(),param.getValue());
		}
		return pair;
	}
	/**
	 * 从输入流获取信息
	 * @param inputStream 输入流
	 * @return
	 * @throws Exception
	 */
	private String getData(InputStream inputStream) throws Exception
	{
		String data = "";
		//内存缓冲区
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		int len = -1;
		byte[] buff = new byte[1024];
		try
		{
			while((len=inputStream.read(buff))!=-1)
			{
				outputStream.write(buff, 0, len);
			}
			byte[] bytes = outputStream.toByteArray();
			data = new String(bytes);
		} catch (IOException e)
		{
			throw new Exception(e.getMessage(),e);
		}
		finally
		{
			outputStream.close();
		}
		return data;
	}
}


   本节课程下载地址:http://u.115.com/file/aq8oydql

   本节课程文档下载:http://download.youkuaiyun.com/source/3405206

android自定义系统参数,动态修改Android参数信息的方法 有很多朋友咨询过我如果修改android的系统参数 比如 ro.build.id ro.product.name ro.product.device ro.product.model等参数。对应在APP端的Java代码就是Build.ID Build.PRODUCT Build.MODEL等参数。不同于XpoSED&nBSP; VirtualApp 双开助手DualSpaceGo双开双开精... 阅读详情

相关推荐

[RK3399][Android7.1] 系统默认使用的parameter.txt文件

Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 相对rk3288平台,在rk3399上有更多parameter文件供选择,如在device下搜出来这么多。 kris@eco:~/rk3399/device/rockchip$ find . -name parameter*.txt ./rk3399/rk3399_mid/parame...

Kris Fei's blog 3004

瑞芯微Parameter File Format解析

Rockchip android系统平台使用parameter文件来配置一些系统参数 主要包含:串口号:nandflash分区 固件版本,按键信息等; 如下是台电P98HD的parameter参数: FIRMWARE_VER:4.1.1// 固件版本 //固件版本,打包 updata.img 时会使用到,升级工具会根据这个识别固件版本。 //Boot loader 会读取...

u013463707的专栏 2854

[RK3568 Android11] 教程之parameter分区了解

一、分区预览 编译出的分区文件:rockdev/Image-rk3568_r/parameter.txt FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3568_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: rk3568_r CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 TYPE: GPT ...

~未来可期~ 2135

Android学习笔记_48_若水新闻客户端源码剖析

<!-- .content{ font-weight:700; } .content .width99,.content .content_title { border: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; bord

Fenice 1887

CameraParametersReader

android相机适配libcamera_client.so,用objdump导出信息后,自己用vs2013编写一个小程序,用来读取rodata里的CameraParameters

华为昇腾Atlas 200I DK A2实战:从开箱到运行首个AI应用

本文详细介绍了华为昇腾Atlas 200I DK A2开发板从开箱到运行首个AI应用的全过程。包括硬件准备、系统烧录、开发板连接方案、AI应用运行及性能优化技巧,帮助开发者快速上手部署AI项目,提升开发效率。

weixin_27038245的博客 591

Android视频录制从不入门到入门系列教程(四)————Camera Parameter

Camera提供了一个叫做setParameters的方法帮助开发者设置相机的相关参数。 通过Camera的getParameters方法可以获取到当前为相机设置的相关参数。 下面简单介绍下,视频录制会用到的几个参数的用法。 一、设置PreviewSize,即视频预览大小,也即输出到SurfaceView的视频图片的分辨率大小。 需要注意的是,PreviewSize只有那么有限的...

Rvng2014的博客 331

ArcGis布局视图中Excel表格无边框插入与图例符号边框定制技巧

本文详细解析了在ArcGis布局视图中实现Excel表格无边框插入与图例符号边框定制的专业技巧。通过源头净化Excel表格、精准粘贴以及分解图例并单独设置边框属性,有效解决了地图报告中常见的视觉粗糙问题,帮助用户提升专题图与报告的精致度与专业感。

weixin_29292535的博客 305

2.腾讯微博Android客户端开发——Parameter类和SyncHttp类编写 .

在上一节介绍的OAuth认证过程中我们可以看到我们需要不断地和腾讯微博开放平台进行数据的交互,因此我们需要编写一个类用来发送Http请求,并且能处理平台返回过来的数据。学习Html的朋友应该知道Get和Post两种方式提交数据,在这里我们同样也需要编写Post和Get两个方法模拟Post和Get请求。在发送微博时我们还可以上传照片,所以我们还应编写一个方法用于上传图片,但是在这里暂时还不编写上传数...

weixin_33847182的博客 87

Robot Arm 机械臂源码解析

由于我们用的是步进电机,运动的时候是一步一步的,并不是平滑的,这里假设在一个平面上面,一个x步进电机,一个y步进电机。那么放大它们所走的轨迹就会是阶梯状的。而它们也只能沿着网格运动。相当于有了一个最小的分辨率,这个分辨率就是一步。如下图所示,如果x,y电机同时走就能走出45度的斜线。在三维空间里面运动也是如此,你应该可以想象的出来;首先,是updateActualPosition,用来时时更新此时的差补位置,得到的是一个路径与时间t的函数(其中路径的范围为0,1,时间范围为0,dist/v)...

爱吃炸鸡的小猪's blog 1万+

SRAM compiler中Power Gating与Retention的实战配置指南

本文深入解析了在SRAM compiler中配置Power Gating(电源门控)与Retention(数据保持)功能的实战指南。针对低功耗芯片设计,文章详细阐述了如何根据应用场景(如移动AP、IoT设备)权衡开关类型、尺寸、唤醒时序以及保持电压,以实现静态功耗优化与数据可靠性的最佳平衡,并强调了后端实现与签核检查的关键要点。

weixin_29204121的博客 294

腾讯微博Android客户端开发——Parameter类和SyncHttp类编写

在上一节介绍的OAuth认证过程中我们可以看到我们需要不断地和腾讯微博开放平台进行数据的交互,因此我们需要编写一个类用来发送Http请求,并且能处理平台返回过来的数据。学习Html的朋友应该知道Get和Post两种方式提交数据,在这里我们同样也需要编写Post和Get两个方法模拟Post和Get请求。在发送微博时我们还可以上传照片,所以我们还应编写一个方法用于上传图片,但是在这里暂时还不编写上传数...

weixin_34194317的博客 99

Python爬虫实战:使用最新技术抓取采购网招标公告信息

本文将详细介绍如何使用Python最新爬虫技术构建一个高效的采购网招标公告信息抓取系统。我们将从爬虫基础概念讲起,逐步深入到高级技巧,包括异步处理、反爬虫对策、数据解析与存储等,并提供完整的代码实现。本文旨在为读者提供一套完整的网络数据采集解决方案,适用于各类政府采购平台和商业招标网站。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序或脚本,它们按照一定的规则,自动地浏览万维网并提取所需数据。在现代商业环境中,爬虫技术广泛应用于价格监控、竞争情报收集、市场研究等领域。

2201_76125261的博客 1621

android 参数详解

三个属性都用来适应视图的水平或垂直大小一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便。1fill_parent设置一个构件的布局为fill_parent将强制性地使构件扩展以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。2 wrap_content设...

weixin_33716557的博客 320

MySQL数据库面试题(2022版)

序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124023797 2 Java集合容器面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124043363 3 Java异常面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124....

拉格朗日的学习笔记 1万+

【低照度图像增强系列】使用MSRCR(Multi-Scale Retinex with Color Restoration)算法对低照度图像进行增强处理

【低照度图像增强系列】使用MSRCR(Multi-Scale Retinex with Color Restoration)算法对低照度图像进行增强处理

静谧、淡雅 648

[AndroidO] [RK3399] -- Rockchip 平台 parameter.txt 文件详解

本文参考于:https://blog.csdn.net/kris_fei/article/details/80805080 路径:devic/rockchip/rk3399/parameter.txt 概述 Rockchip android 系统平台使用 parameter 文件来配置一些系统参数,比如定义串口号,固件版本,nand flash 分区信息等等。 Parameter 文件是非...

u014674293的博客 4169

基于C++和Basler SDK的相机开发详解

Basler相机是德国Basler公司生产的高性能工业相机,具有高分辨率、高帧率和低噪声的特点。Basler相机广泛应用于机器视觉、工业自动化、医疗影像和安防监控等领域。高分辨率和高帧率:能够捕捉清晰、细腻的图像。多种接口:支持USB、GigE、Camera Link等多种接口,方便不同应用场景的需求。丰富的配置选项:支持多种图像格式、分辨率和帧率的配置,适应不同的应用需求。本文详细介绍了如何基于C++和Basler SDK进行相机开发,涵盖了从环境搭建、相机连接、图像采集到图像处理的完整过程。

qq_38334677的博客 2098

android c 如何规避Wunused-parameter等警告错误

1,gps_gateway.cpp:405:35: error: unused parameter 'callbacks' [-Werror,-Wunused-parameter]static int gps_init(GpsCallbacks* callbacks)=》android.bp :  -Wno-unused-parameter 这个可以规避clang_cflags: ["-Wno-c...

Kevin的专栏 8308

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

有关$.post(url,{param:"param"},function(data){})中的返回对象data

之前用了$.post()已经很久了,可是从来没有好好研究过这里的data对象,今天好好总结下: jquery文档中说,这里的data类型可以是:xml, html, script, json, text, _default 下面介绍我用过的几种: 1.json 后台: PrintWriter out = null; try { JSONArray json = JSONArray.f

lixld的专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于Android x86的启动参数设置相关探讨

前面讲了Android x86如何安装到VirtualBox的方法,下面来看看启动参数的设置问题。       说明:所有方法笔者也是从网上搜集得来,结合自己亲测在此总结一下。        设置启动参数其实很简单,如下: 选择第一项,按“e”。 选择第一项,按“e”。         进到这里就可以写入启动参数了,比如启动时询问分辨率:vga=ask ,输入完成后回车即可回

江下飞雪 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 1.腾讯微博Android客户端开发——OAuth认证介绍
下一篇: 3.腾讯微博Android客户端开发——算法、编码、辅助方法编写
coolszy
博客等级 码龄19年 2659粉丝 149原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值