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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl0aWFucGVuZ2hhaGE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

1、组装URL的过程:

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

2、发送URL的过程:

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

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

  1. public class HttpRequestTask implements Runnable {
  2.  
  3. private Handler handler;
  4. private String url;
  5. private int which;
  6. private String method;
  7.  
  8. public HttpRequestTask(Handler handler, String url, int which, String method) {
  9. this.url = url;
  10. this.handler = handler;
  11. this.which = which;
  12. this.method = method;
  13.  
  14. }
  15.  
  16. public void startTask() {
  17. new Thread(this).start();
  18. }
  19.  
  20. @Override
  21. public void run() {
  22. Looper.prepare();
  23. sendRequest();
  24. }
  25.  
  26. private void sendRequest() {
  27. String result = null;
  28. if (method != null && method.equals(MyConstant.POST)) {
  29. result = HttpUtil.queryStringForPost(url);
  30. }
  31. if (method != null && method.equals(MyConstant.GET)) {
  32. result = HttpUtil.queryStringForGet(url);
  33. }
  34. // Log.e("---result---", result);
  35. Message msg = Message.obtain();
  36. msg.what = which;
  37. msg.obj = result;
  38. handler.sendMessage(msg);
  39. }
  40.  
  41. }

3、解析URL的过程:

  1. // 发送Post请求。获得响应查询结果
  2. public static String queryStringForPost(String url) {
  3.  
  4. HttpPost request = HttpUtil.getHttpPost(url);
  5. String result = null;
  6.  
  7. try {
  8. // 获得响应对象
  9. HttpResponse response = HttpUtil.getHttpResponse(request);
  10.  
  11. if (response.getStatusLine().getStatusCode() == 200) {
  12. result = EntityUtils.toString(response.getEntity());
  13. return result;
  14. }
  15.  
  16. } catch (ClientProtocolException e) {
  17. e.printStackTrace();
  18. result = "网络异常!";
  19. return result;
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. result = "网络异常!";
  23. return result;
  24. }
  25. return result;
  26. }
  1. // // 获得post请求对象request
  2. public static HttpPost getHttpPost(String url) {
  3. // 去除空格
  4. // if (url != null) {
  5. // Pattern p = Pattern.compile("\\s");
  6. // Matcher m = p.matcher(url);
  7. // url = m.replaceAll("");
  8. // }
  9. HttpPost request = new HttpPost(url);
  10. return request;
  11. }

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

org.apache.http.client.methods.HttpPost

实际上返回的result字符串是一个JSON类型的字符串,我们仅仅须要使用JSONObject来处理对应的JSON就能够了。得到我们须要数据,返回,OK。

这实际上是一个比較清晰的流程,当中也能够看出多线程处理的模式。

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

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

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

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

  2. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

  3. React Native中的网络请求fetch和简单封装

    React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问: https://segmentfault.com/a/1190000003810 ...

  4. iOS中的网络请求 和 网络监测

    1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...

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

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

  6. [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. Cocos2d-X多线程(4) 在子线程中进行网络请求

    新版本的android系统已经不允许在UI线程中进行网络请求了,必须新建一个线程. 代码实操: 头文件: #ifndef __TestThreadHttp_SCENE_H__ #define __Te ...

  8. Jest中Mock网络请求

    Jest中Mock网络请求 最近需要将一个比较老的库修改为TS并进行单元测试,修改为TS还能会一点,单元测试纯粹是现学现卖了,初学Jest框架,觉得在单元测试中比较麻烦的就是测试网络请求,所以记录一下 ...

  9. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

随机推荐

  1. android - 模拟器连接本地tomcat

    在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...

  2. firebug js版

    1.有些时候如 ie6 7 8 你觉得F12 不好用的话  你可以直接 把这两个js 引用到html 里面 <script src="https://getfirebug.com/fi ...

  3. 用core dump来调试程序段错误

    有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来 ...

  4. CSS样式的面向对象思想(一)

    今天来谈一谈CSS样式的面向对象写法.顾名思义,面向对象是高级语言具备的特性,主要是为了程序高可复用,解决模块之间的耦合关系,那么像CSS这样的脚本语言是否也可以使用面向对象的思想,来提高代码的可维护 ...

  5. python学习第十七天 --定制类

    何为定制类? Python的class允许定义许多特殊方法,可以让我们非常方便地生成特定的类.在类中应用或者重写python的特殊方法,得到的类,就是定制类. 大家都知道print的用法.见下面例子 ...

  6. sencha Touch 的 DatePickerField等时间的汉化

    对于datepickerfiled dateFormat 时间格式 Y-m-d w星期几    W 一年第多少周 时间的初始化 mydatefield.setValue( { year:2013, m ...

  7. hdu1405 第六周J题(质因数分解)

    J - 数论,质因数分解 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Desc ...

  8. Egret 入门

    居然使用 TyptScript... 先贴手册地址:http://www.typescriptlang.org/docs/tutorial.html. 先要接受一个诡异的写法: private loa ...

  9. poj 3686 The Windy's

    http://poj.org/problem?id=3686 #include <cstdio> #include <cstring> #include <algorit ...

  10. 324篇CSS应用效果集合(梦想天空,可同时应用于Web开发与Qt界面开发)

    http://www.cnblogs.com/lhb25/category/146075.html http://www.yyyweb.com/