Asynchttpurlconnection 网络框架 (HttpURLConnection+newCachedThreadPool)

本文介绍了一种基于HttpURLConnection和newCachedThreadPool的网络框架实现。框架包括Request、Response、ResponseListener等核心类,利用newCachedThreadPool的线程回收特性,简化网络请求流程。Request用于设置请求参数和响应体,Application中初始化线程池,Activity或Fragment通过实现ResponseListener接口接收返回数据。RequestParams用于存储请求参数,NetWorkThreadManager管理线程池,NetWorkRunnable处理网络请求并在子线程与主线程间传递信息。
摘要由CSDN通过智能技术生成

看过git上volley和asynchttpclient网络框架的源码好长时间了,打算自己弄个网络框架是基于HttpURLConnection+newCachedThreadPool,目前httpclient已经被淘汰了,盛行的是HttpURLConnection,像volley和okhttp都主打HttpURLConnection,所以我弄了这个框架。

框架结构相对来说比较简单:Request、Response、ResponseListener、NewWorkManager、NewWorkRunnable、RequestParams、Erro等主要的类;
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。基于这个优点所以我选择它。Request封装了请求参数和响应体,初始化线程池,完成整个请求过程。

Request主要用来初始化请求的参数和返回体等。首先要在Application里初始化initRequest()创建线程池。防止context内存泄漏采用了WeakReference引用;

public class Request {
    private static NetWorkThreadManager newtWorkInstance;
    //在application里初始化
    public static void initRequest(){
        newtWorkInstance = NetWorkThreadManager.getNetWorkThreadPoolInstance();
    }
    private WeakReference weakReference;
    private Activity activity;
    private Response<?> response;
    private RequestParams requestParams;
    private int tag;
    public Request(Response<?> response,Activity activity,RequestParams requestParams,int tag){
        weakReference = new WeakReference<Activity>(activity);
        this.response = response;
        this.requestParams = requestParams;
        this.tag = tag;
        this.activity = activity;
    }
    public Request(Response response,Fragment fragment,RequestParams requestParams,int tag){
        weakReference = new WeakReference<Fragment>(fragment);
        this.response = response;
        this.requestParams = requestParams;
        this.tag = tag;
        activity = fragment.getActivity();
    }
    private int requestType = 0;
    public void setRequestType(int requestType){
        this.requestType = requestType;
    }
    public int getRequestType(){
        return requestType;
    }
    public void requestStart(){
        if(!Utils.isNetworkAvailable(activity)){
            ((ResponseListener)weakReference.get()).onError(new Error("当前无网络"),tag);
            return;
        }
        response.getResponseListener().onBefore(tag);
        netWorkRunnable = new NetWorkRunnable(this);
        newtWorkInstance.cachedThreadPool.execute(netWorkRunnable);
    }
    private NetWorkRunnable netWorkRunnable;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpURLConnection是Java提供的用于发送HTTP请求和获取HTTP响应的类。它是建立在Java IO和Java NET库之上的,提供了对HTTP协议的完整支持,包括HTTP/1.0和HTTP/1.1。 HttpURLConnection的主要特性包括: 1. 支持GET、POST、PUT、DELETE等HTTP请求方法 2. 支持HTTP/1.0和HTTP/1.1协议 3. 支持HTTPS协议 4. 支持重定向 5. 支持缓存机制 6. 支持HTTP认证 7. 支持代理服务器 使用HttpURLConnection发送HTTP请求的基本步骤如下: 1. 创建URL对象 2. 调用URL对象的openConnection()方法获取HttpURLConnection对象 3. 设置请求方法、请求头、请求体等相关参数 4. 发送请求并获取响应码 5. 读取响应体数据 6. 关闭连接 以下是一个简单的示例代码: ```java import java.net.*; import java.io.*; public class HttpURLConnectionDemo { public static void main(String[] args) throws Exception { URL url = new URL("http://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); int responseCode = conn.getResponseCode(); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } } ``` 这段代码发送了一个GET请求到"http://www.example.com",并输出了响应码和响应体数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值