Android中解析网络请求的URL

最近正在做Android网络应用的开发,使用了android网络请求方面的知识,现在向大家介绍网络请求方面的知识,我们知道android中向服务器端发送一个请求,(这就是我们通常所说的POST请求),我们要发送一个完整的URL,然后服务器端接收到这个URL,对这个URL进行特定的解析,就是对URL进行解析,转化为JSON数据,然后,我们只要处理这个JSON数据就可以了。

我现在就用我的项目实例来体现解析URL的过程:

1、组装URL的过程:

private String getOrderPayUrl(int order, int action, String accountid,
			String token) {
		Calendar calendar = Calendar.getInstance();
		long time = calendar.getTimeInMillis() / 1000;
		return orderPayUrl + "?action=" + action + "&time=" + time
				+ "&accountid=" + accountid + "&token=" + token + "&paymoney="
				+ order + "¤cy=CNY&" + "sign="
				+ getSign(action, time, accountid);
	}

2、发送URL的过程:

private void httpRequest(String url, int which, String method) {
		HttpRequestTask task = new HttpRequestTask(mHandler, url, which, method);
		task.startTask();
	}

其中mHandler为一个定义的局部变量,用Handler类型来处理返回的解析结果,

public class HttpRequestTask implements Runnable {

	private Handler handler;
	private String url;
	private int which;
	private String method;

	public HttpRequestTask(Handler handler, String url, int which, String method) {
		this.url = url;
		this.handler = handler;
		this.which = which;
		this.method = method;

	}

	public void startTask() {
		new Thread(this).start();
	}

	@Override
	public void run() {
		Looper.prepare();
		sendRequest();
	}

	private void sendRequest() {
		String result = null;
		if (method != null && method.equals(MyConstant.POST)) {
			result = HttpUtil.queryStringForPost(url);
		}
		if (method != null && method.equals(MyConstant.GET)) {
			result = HttpUtil.queryStringForGet(url);
		}
		// Log.e("---result---", result);
		Message msg = Message.obtain();
		msg.what = which;
		msg.obj = result;
		handler.sendMessage(msg);
	}

}

3、解析URL的过程:

// 发送Post请求,获得响应查询结果
	public static String queryStringForPost(String url) {

		HttpPost request = HttpUtil.getHttpPost(url);
		String result = null;

		try {
			// 获得响应对象
			HttpResponse response = HttpUtil.getHttpResponse(request);

			if (response.getStatusLine().getStatusCode() == 200) {
				result = EntityUtils.toString(response.getEntity());
				return result;
			}

		} catch (ClientProtocolException e) {
			e.printStackTrace();
			result = "网络异常!";
			return result;
		} catch (IOException e) {
			e.printStackTrace();
			result = "网络异常!";
			return result;
		}
		return result;
	}
// // 获得post请求对象request
	public static HttpPost getHttpPost(String url) {
		// 去除空格
//		if (url != null) {
//			Pattern p = Pattern.compile("\\s");
//			Matcher m = p.matcher(url);
//			url = m.replaceAll("");
//		}
		HttpPost request = new HttpPost(url);
		return request;
	}

其中我们要使用的包文件是

org.apache.http.client.methods.HttpPost

实际上返回的result字符串是一个JSON类型的字符串,我们只需要使用JSONObject来处理相应的JSON就可以了,得到我们需要数据,返回,OK,

这实际上是一个比较清晰的流程,其中也可以看出多线程处理的模式。

一旦我们需要网络请求的时候,我们一般会将网络请求的处理部分放在子线程中,另外开一个线程,这样就不会在原线程中处理过多的事情,这也减轻了主线程的压力。

时间: 2024-10-11 18:50:40

Android中解析网络请求的URL的相关文章

(转载)Android之三种网络请求解析数据(最佳案例)

[置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 小武:相信大家都用过网络请求解析数据,只是方法不一样而已,但是,逻辑都是差不多的: 一:AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个

iOS开发中的网络请求

今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST.今天来看一下四种网络请求的实现方式. 一.同步GET // 1.将网址初始化成一个OC字符串对象 NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@&region=%@&output=json&ak=6E823

Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载

上一篇专题Android开发之网络请求通信专题(一):基于HttpURLConnection的请求通信我们讲解了如何使用httpurlconnection来实现基本的文本数据传输.一般在实际开发中我们可以用于传输xml或者json格式的数据.今天我们来讲解另外一种http网络请求的方式:httpclient,并实现文件的上传和下载. 在这里插个题外话,其实这些网络请求有很多第三方jar包可以使用,这些包都封装得很好了.如果只是想使用,我们就直接拿别人得jar包来用就好.博主这里推荐一个叫xuti

Android开发之网络请求通信专题(一):基于HttpURLConnection的请求通信

在Android开发中,网络请求必然是必不可少.一般而言,都是基于http的网络请求.有时候也会有SOCKET请求,这个后续的专题再讲.今天,我们就先讲讲常用的Http请求. http求情自然是遵循http协议的,相关内容请转接:Java学习笔记之Http协议详解 好了,开始今天的正题. 一.基础HTTPURL请求方式 我们先来看一个最简单的例子,通过get方法请求拿到返回值 1.用get方式请求 URL url = new URL( "http://192.168.31.144:10010/M

Android之旅十五 android中的网络操作

android中的网络操作和java里面没有什么区别,java里面的很多网络操作方法都可以搬到android中去使用,主要几个点: 1.post和get请求的区别,大家可以在网上查阅有关资料进行了解,get主要以向地址中拼接字符串参数发送到服务器,长度有限制,并且请求参数暴露在地址栏中,不怎么安全:post则主要是将请求参数转换为相应的http协议请求体发送到服务器,相比get方式,参数的长度没有限制,并且参数信息不会暴露给用户: 2.我们在java web里面通过浏览器以post方式发送数据,

ios中封装网络请求类

ios中封装网络请求类 #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 #import "UseXmlParser.h" //判断是否联网 #import "Reachability.h" //sbJson,判断json的解析 #import "JSON.h" @implementation JS

基于Android Volley的网络请求工具

基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Release,jar包.直接下载 二.Volley基本处理流程: 1.应用初始化Volley.2.Volley创建一个RequestQueue.NetworkDispatcher组及Network.3.RequestQueue即一个Request队列,RequestQueue会创建一个Executor

抓包工具Fidder详解(主要来抓取Android中app的请求)

抓包工具Fidder详解(主要来抓取Android中app的请求) 今天闲着没吊事,来写一篇关于怎么抓取Android中的app数据包?工欲行其事,必先利其器,上网google了一下,发现了一款神器:Fiddler,这个貌似是所有软件开发者必备神器呀!这款工具不仅可以抓取PC上开发web时候的数据包,而且可以抓取移动端(Android,Iphone,WindowPhone等都可以),太强大了,以前搞web的时候,知道有一款叫做HttpWatch工具,可以抓取web的请求数据包的,但是和这款神器来

Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"