Android 网络请求 框架

大家好,不知不觉进行Android的开发工作已经快4年了,一直在网上观摩各位大牛的博客,令我学到了很多,在此我深表感谢,今天是小弟第一次写自己的博客,希望大家能多多指正。

废话不多说了,下面进入正题:

Http的数据交互相信大家熟悉的不能再熟悉了,每一个开发者都需要研究使用的功能,在这里,我写一下自己的一些实现方式:

首先,Http请求常用的大概有GET和POST两种请求方式,到这里,大家应该有个大概的了解,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。我们从表面上来看一下GET和POPST的区别: 

 1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&    
    相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。
    POST把提交的数据则放置在是HTTP包的包体中。   

 2.首先是"GET"方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量 
   就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限 
   制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览
   器,如FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。【注意这是限制是整个URL长度,  
   而不仅仅是你的参数值数据长度。】

   然后是POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限
   制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)的实现原理在这里就不在做多赘述了,下面直接进入代码,由于本代码在okhttp的基础上完成整理,代码中注释也写了很多,这里就直接上代码了:

首先我们写一个类HttpAddress,主要存一些接口地址等常量以及各位自定义的一些数据常量等,例:

package com.hs.http;

import java.util.HashMap;
import java.util.Map;


/**
 * 存放所有接口地址
 * Created by ZM on 2016/7/13 0022.
 */
class HttpAddress {

    /**
     * post请求类型传入Map
     */
    public static final String HttpTypeMap = "Map";
    /**
     * post请求类型传入Json
     */
    public static final String HttpTypeJson = "JSON";

    public static final String  CodeThird="error_code";
    public static final String  MsgThird="reason";
    public static final String  DataThird="data";

    public static final String  CodeLocal="code";
    public static final String  MsgLocal="msg";
    public static final String  DataLocal="data";
    /**
     * H5域名
     */
    public static String URL_H5 = "https://www.xiaomoc.com/indiana-app/";

    /**
     * 推广H5
     */
    public static String URL_H5_PROMPT = URL_H5 + "html/microSite.html";

    /**
     * 接口地址(第三方接口服务器地址)
     */
    public static String URL_HTTP_THRID = "http://v.juhe.cn/";

    /**
     * 接口地址(我的App服务器地址)
     */
    public static String URL_HTTP = "https://www.xiaomoc.com/indiana-app/";
    /**
     * 图片服务器地址
     */
    public static String URL_IMAGE = "http://120.77.13.93/";

    /**
     * 设置USERID
     */
    public static int UserID;

    public static int getUserID() {
        return UserID;
    }

    public static void setUserID(int userID) {
        UserID = userID;
    }

    protected static final Map<Integer, String> address = new HashMap();

    /*分享Image图片URL*/
    public static final String SHAREIMAGE = "http://www.xiaomoc.top/0986e377ef7e996aa077234080630fd1";

    private static final String TAG = "HttpAddress";


    public  static  final  int NEWS=0;

    static {
        address.put(NEWS, "app/carnews/list");
    }
}

然后,我们来写一个回调的监听接口类:HttpCallbackListener

package com.hs.http;

/**
 * Created by ${ZM} on 2016/7/13 0013.
 */
public interface HttpCallbackListener<T> {
    /**
     * 没有网络时返回
     */
    void noNetwork(int code,String msg);

    /**
     * 未知错误返回
     * @param  msg 错误信息
     */
    void unknownError(int code,String msg);

    /**
     * 失败时返回
     *
     * @param code 错误码
     * @param msg  错误信息
     */
    void failure(int code, String msg);

    /**
     * 成功时返回
     * @param t
     */
    void success(int id,T t);

}

第三步,建立我们的请求方法,这里的例子根据我自己项目中用的,首先创建请求体,然后通过一些接口回调完成数据的传输,并在成功时缓存了获取到的数据,方便在下一次因为某些原因获取失败时,直接返回上一次缓存的数据,然后获取里面包含了Get,Post(这里因为项目需要,写了两种请求体的生成方式),可能有些地方对于大家来说是多余的,以下就不说了,直接上全部代码了,大家仅仅做个参考:

HttpRequest:

package com.hs.http;

import android.app.Activity;
import android.content.Context;
import android.util.Log;

import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

import cn.ljguo.security.AESAndroid;
import cn.ljguo.security.MD5;
import demo.hs.util.NetWorkUtil;


/**
 * Created by  ZM on 2016/7/13 0013.
 */
abstract class HttpRequest extends HttpAddress {

    private final static String TAG = "HTTP";
//  md5加密(本App中没用到)
//    if (BuildConfig.IS_HTTP_ENCRYPTED) {
   
//        json = MobileKit.encryptMobileText(json.toString());
//    }
//  md5解密(本App中没用到)
//    if (BuildConfig.IS_HTTP_ENCRYPTED) {
   
//        content = MobileKit.decryptMobileText(content);
//        Log.e(TAG,  "获取服务器加密后的数据=[" + content + "]");
//    } else {
   
//        Log.e(TAG, "获取到数据=[" + content + "]");
//    }

    /***
     * POST方式传参请求
     *
     * @param id       接口Id
     * @param isThrid  true--第三方接口服务器  false--自己App后台提供的服务器
     * @param httpType HttpTypeMap--传入map类型   HttpTypeJson--传入json类型
     * @param<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值