HTTP相关技术介绍与使用

前言

http(hypertext transform protocol)超文本传输协议是一种数据格式,定义了web客户端与服务器端之间的对话,以及服务器如何传输数据到客户端。
http连接使用TCP/IP协议来传输数据,客户端到服务器的请求分四个步骤:

  • 客户端在端口打开与服务器的连接,URL还可以指定其它端口(URL构成:协议protocol主机host路径path参数QueryString)
  • 客户端想要发送消息,请求指定路径上的资源。这个请求包括一个首部,可选地址,后面是请求的数据。
  • 服务器端向客户端发送响应,响应以响应码开头,后面是元数据的的首部,一个空行以及所请求的文档或者错误消息。
  • 服务器关闭连接

与http服务器的通信遵守请求-响应模式:先是一个无状态请求,后面是无状态响应。大致分为几部分:
1.起始行,包括http方法和要执行这个方法的资源的路径。
2.一个包含名-值字段的首部,可以提供元信息
3.一个请求主体,包括资源的一个表示
4个主要HTTP方法GET POST PUT DELETE

HTTP接口访问

1.网咯连接检查

首先要检查当前是否处于上网状态,让后在进行网络访问操作。如果当前网络不可用,那么无须执行网络访问,直接提示用户"请开启网络连接“就好了。检查网络连接,Android会要求App具有上网的权限,下面就要打开 AndroidManifest.xml经行网络的配置。

<!--互联网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--查看网络连接状态-->
<uses-permission android name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android name="android.permission.ACCESS_WIFI_STATE"/>

添加网络权限配置后,是用ConnectivityManager检测网络连接,该工具的对象从系统服务Context.CONNECTIVITY_SERVICE中获取。调用连接管理对象的getActiveNetworfInfo(),返回一个NetworkInfo实例,通过该实例可获取详细的网络连接通信信息。下面是NetworkInfo常用的方法。

  • getType():获取网络类型。
ConnectivityManager类的网络类型 说明
TYPE_WIFI wifi
TYPE_MOBILE 数据连接
TYPE_WIMAX wimax
TYPE_ETHERNET 以太网
TYPE_BLUETOOTH 蓝牙
TYPE_VPN vpn
  • getState():获取网络状态。
  • getSubtype():获取网络子类型。

2.移动数据格式JSON

网络通信的交互数据有两大类,分别是JSON和XML。对于App来说,基本采用JSON格式与服务器通信。一个是JSON串比XML串短很多,在节省流量上占了优势;另外一个是JSON串解析的更快,也省电。
Android自带JSON解析工具,提供JSONObject(JSON对象)和JSONArray(JSON数组)的解析处理.
1.JSONObject
下面来看JSONObject的常用方法。

  • JSONObject构造函数:从指定字符串构造一个JSONObject对象。
  • getJSONObject:获取指定名称的JSOnObject对象。
  • getString:获取指定名称的字符串
  • getInt:获取指定名称的整形
  • getDouble:获取指定名称的双精度数。
  • getBoolean:获取指定名称的布尔数。
  • getJSONArray:获取指定名称的JSONArray数组对象。
  • put:添加一个JSONObject对象。
  • toString:把当前的JSONObject对象输出位一个JSON字符串。

2.JSONArray
下面是JSONArray常用方法。

  • length:获取JSONArray数组的长度。
  • getJSONObject:获取JSONArray数组在指定位置的JSONObject对象。
  • put:往JSONArray数组中添加一个JSONObject对象。

下面是使用JSON串的代码

public class JsonActivity extends AppCompatActivity implements OnClickListener {
	
	private TextView tv_json;
	private String mJsonStr;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_json);
		tv_json = (TextView) findViewById(R.id.tv_json);
		findViewById(R.id.btn_construct_json).setOnClickListener(this);
		findViewById(R.id.btn_parser_json).setOnClickListener(this);
		findViewById(R.id.btn_traverse_json).setOnClickListener(this);
		mJsonStr = getJsonStr();
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.btn_construct_json) {
			tv_json.setText(mJsonStr);
		} else if (v.getId() == R.id.btn_parser_json) {
			tv_json.setText(parserJson(mJsonStr));
		} else if (v.getId() == R.id.btn_traverse_json) {
			tv_json.setText(traverseJson(mJsonStr));
		}
	}

//构造JSON串
	private String getJsonStr() {
		String str = "";
		JSONObject obj = new JSONObject();
		try {
			obj.put("name", "address");
			JSONArray array = new JSONArray();
			for (int i = 0; i < 3; i++) {
				JSONObject item = new JSONObject();
				item.put("item", "第" + (i + 1) + "个元素");
				array.put(item);
			}
			obj.put("list", array);
			obj.put("count", array.length());
			obj.put("desc", "这是测试串");
			str = obj.toString();
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return str;
	}

//解析JSON串
	private String parserJson(String jsonStr) {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值