Android中解析网络请求的URL
2016-02-20 17:44
573 查看
近期正在做Android网络应用的开发,使用了android网络请求方面的知识。如今向大家介绍网络请求方面的知识。我们知道android中向server端发送一个请求,(这就是我们通常所说的POST请求),我们要发送一个完整的URL。然后server端接收到这个URL,对这个URL进行特定的解析。就是对URL进行解析,转化为JSON数据,然后,我们仅仅要处理这个JSON数据就能够了。
我如今就用我的项目实例来体现解析URL的过程:
1、组装URL的过程:
2、发送URL的过程:
当中mHandler为一个定义的局部变量。用Handler类型来处理返回的解析结果,
3、解析URL的过程:
当中我们要使用的包文件是
org.apache.http.client.methods.HttpPost
实际上返回的result字符串是一个JSON类型的字符串,我们仅仅须要使用JSONObject来处理对应的JSON就能够了。得到我们须要数据,返回,OK。
这实际上是一个比較清晰的流程,当中也能够看出多线程处理的模式。
一旦我们须要网络请求的时候。我们通常会将网络请求的处理部分放在子线程中,另外开一个线程。这样就不会在原线程中处理过多的事情,这也减轻了主线程的压力。
我如今就用我的项目实例来体现解析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。
这实际上是一个比較清晰的流程,当中也能够看出多线程处理的模式。
一旦我们须要网络请求的时候。我们通常会将网络请求的处理部分放在子线程中,另外开一个线程。这样就不会在原线程中处理过多的事情,这也减轻了主线程的压力。
相关文章推荐
- 网络编程中的Socket详解---Delayed Ack(Ack确认延迟) && Nagle Algorithm(纳格算法)
- 计算机网络--http代理server的设计与实现
- erlang访问https地址
- 【Linux 基础篇】之网络、语言、级别等配置
- PHP http_response_code Get or Set the HTTP response code
- spring integration学习入门之tcp通讯
- 【Web基础】HTTP长连接和短连接以及推送技术原理
- Jmeter调试工具---HTTP Mirror Server
- NameValuePair(网络http连接)
- Jmeter之HTTP Request Defaults
- Jmeter之Http Cookie Manager
- 使用Jmeter进行http接口测试
- PyHeapTypeObject http://blog.sina.com.cn/s/blog_72d1932a0101gcg3.html
- 2016太原网络营销师sem(百度竞价)账户搭建问题解剖?
- TCP/IP协议三次握手流程
- 深度学习系列(3.1)——神经网络-感知机(Perceptrons)
- 使用HttpUrlConnection取代Apache Http Client
- linux 下使用 tc 模拟网络延迟和丢包
- 基于linux TCP的select回射服务器
- 返回码错误总结