Android下网络请求的两个封装类

原文出处:http://www.2cto.com/kf/201412/362765.html

1、背景介绍

我们在Activity和Fragment中做网络请求的时候,往往用到线程和handler消息处理机制等做处理。这里,我们将网络请求,一个get和一个post请求,使用线程封装一下。这样就剥离开了Activity中的代码量,将复杂的代码,封装在不同的类中,实现一个类的单一原则。


2、GET请求封装

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
  * GET提交的网络请求<br>
  * <br>
  * 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程 <br>
  * 在返回的msg信息中,what封装了返回的状态码信息 <br>
  * 1001代表成功,404代表客户端请求错误,100代表IO处理错误 <br>
  * <br>
  * obj信息封装了请求的结果,返回值为String类型
  *
  * @author ljtyzhr
  *
  */
public class HttpGetThread implements Runnable {
 
     /** handler处理 */
     private Handler handler;
     /** 网络请求地址 */
     private String url;
 
     /**
      * 使用Get提交的构造方法
      *
      * @param handler
      *            消息对象
      * @param url
      *            请求的url地址
      */
     public HttpGetThread(Handler handler, String url) {
         this .handler = handler;
         this .url = url;
     }
 
     @Override
     public void run() {
         // 获取我们回调主ui的message
         Message msg = handler.obtainMessage();
         try {
             String result = HttpRequestUtils.doGet(url);
             msg.what = ConstantValues.GET_NET_SUCCEED;
             msg.obj = result;
         } catch (ClientProtocolException e) {
             msg.what = 404 ;
         } catch (IOException e) {
             msg.what = 100 ;
         }
         // 给主ui发送消息传递数据
         handler.sendMessage(msg);
     }
}

3、POST请求封装

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
  * POST提交的网络请求<br>
  * <br>
  * 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程 <br>
  * 在返回的msg信息中,what封装了返回的状态码信息 <br>
  * 1001代表成功,404代表客户端请求错误,100代表IO处理错误 <br>
  * <br>
  * obj信息封装了请求的结果,返回值为String类型
  *
  * @author ljtyzhr
  *
  */
public class HttpPostThread implements Runnable {
 
     /** handler处理 */
     private Handler handler;
     /** 网络请求地址 */
     private String url;
 
     /**
      * 使用post提交的构造方法
      *
      * @param handler
      *            消息对象
      * @param url
      *            请求的url地址
      */
     public HttpPostThread(Handler handler, String url) {
         this .handler = handler;
         this .url = url;
     }
 
     @Override
     public void run() {
         // 获取我们回调主ui的message
         Message msg = handler.obtainMessage();
         try {
             String result = HttpRequestUtils.doPost(url);
             msg.what = ConstantValues.GET_NET_SUCCEED;
             msg.obj = result;
         } catch (ClientProtocolException e) {
             msg.what = 404 ;
         } catch (IOException e) {
             msg.what = 100 ;
         }
         // 给主ui发送消息传递数据
         handler.sendMessage(msg);
     }
}

4、使用方式

看到上面的参数信息,我们大致知道需要一些怎样的参数,这里简单介绍如何使用这两个封装类:

给出一个Get请求的实例:

?
1
2
HttpGetThread httpGetThread = new HttpGetThread(handler, url, this );
new Thread(httpGetThread).start();

handler的处理机制:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private Handler handler = new Handler() {
         public void handleMessage(android.os.Message msg) {
             switch (msg.what) {
             case ConstantValues.GET_NET_SUCCEED:
                 // 获取网络成功
                 jsonString = (String) msg.obj;
                 break ;
             case ConstantValues.GET_NET_FAILED:
                 // 获取网络失败
                 break ;
             case ConstantValues.DEL_RESULT_SUCCEED:
                 // 数据处理成功了,开始设置数据
                 break ;
             case ConstantValues.DEL_RESULT_FAILED:
                 // 字符串处理失败
                 theUrlErrorShow();
                 break ;
             case ConstantValues.THE_URL_ERROR:
                 // 字符串处理失败
                 Logger.ii(TAG, "The url error!" );
                 break ;
             default :
                 break ;
             }
         }
     };

5、总结

在使用上面的网络请求封装类的时候,要注意两个问题:

第一、我们使用的网络请求中,需要传递当前的handler处理对象,用于接收我们的消息处理返回信息;内部的网络请求,get和post请求,这里不再赘述;

第二、我们使用的这个框架中,没有使用到Cookie处理机制,那么当我们做需要登录的请求的时候,需要使用Cookie处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值