KJHttp网络框架使用

1.
compile 'org.kymjs.kjframe:kjframe:2.6'
2.

基础功能

KJHttp是专为解决Android中Http通信而产生的,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速开发。 KJHttp自带了数据缓存功能,你所访问的Http数据都将在本地建立一个缓存,默认的缓存时间是5分钟,也就是5分钟以内相同的请求都不会经过网络,而是从本地缓存中直接读取。当然对于及时性要求较高的新闻类应用,你也可以关闭这个特性或者只需要将缓存时间设置成0就行了~

 
  httpconfig = new HttpConfig();
  httpconfig.cacheTime = 0;
  kjhttp = new KJHttp(httpconfig);

KJHttp支持JSON格式参数提交、AJAX方式的Form表单参数提交,文件与图片的上传下载,同时支持根据你的需求所发起的自定义Request。

工作原理

整个KJHttp工作流程:采用责任链设计模式,由三部分组成,类似设计可以类比Handle…Looper…MessageQueue
1. KJHttp负责不停向NetworkQueue(或CacheQueue实际还是NetworkQueue, 具体逻辑请查看 {@link CacheDispatcher})添加Request
2. 另一边由TaskThread不停从NetworkQueue中取Request并交给Network执行器(逻辑请查看 {@link NetworkDispatcher} ),
3. Network执行器将执行成功的NetworkResponse返回给TaskThead,并通过Request的定制方法 {@link Request#parseNetworkResponse()}封装成Response,最终交给分发器 {@link Delivery} 分发到主线程并调用HttpCallback相应的方法

3.实例并分析其网络的底层源码实现:

package com.example.administrator.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import org.kymjs.kjframe.KJHttp;
import org.kymjs.kjframe.http.HttpCallBack;
import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;
public class MainActivity extends AppCompatActivity {
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       btn=findviews(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                KJHttp http=new KJHttp();
                String s = http.toString();
                Log.i("gsc",s);
                http.get("http://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html", new HttpCallBack() {
                    @Override
                    public void onFailure(int errorNo, String strMsg) {
                        super.onFailure(errorNo, strMsg);
                        Log.i("gsc",strMsg);
                    }

                    @Override
                    public void onSuccess(String t) {
                        super.onSuccess(t);
                        Log.i("gsc",t);
                    }
                });
            }
        });
    }
    public  <T extends View> T findviews(int res){
        return (T) findViewById(res);
    }
}
分析:从
http.get 追到源码
半天没看出什么名堂:突然从
KJHttp
源码82行有点出路:
// 配置器 核心实现包装类
private HttpConfig mConfig
// 请求缓冲区
private final Map<String, Queue<Request<?>>> mWaitingRequests = new HashMap<>();
// 请求的序列化生成器
private final AtomicInteger mSequenceGenerator = new AtomicInteger();
// 当前正在执行请求的线程集合
private final Set<Request<?>> mCurrentRequests = new HashSet<>();
// 执行缓存任务的队列.
private final PriorityBlockingQueue<Request<?>> mCacheQueue = new
        PriorityBlockingQueue<>();
// 需要执行网络请求的工作队列
private final PriorityBlockingQueue<Request<?>> mNetworkQueue = new
        PriorityBlockingQueue<>();
// 请求任务执行池
private final NetworkDispatcher[] mTaskThreads;
// 缓存队列调度器
private CacheDispatcher mCacheDispatcher;
// 配置器
private HttpConfig mConfig;
追索到HttPConfig 源码:
* 网络请求执行器
 **/
发现此类 
public Network mNetwork;
追索到
Network
源码:
httpResponse = mHttpStack.performRequest(request, headers);此段
发现可疑类
 HttpStack mHttpStack;
在追溯源码草竟然是个接口顿时懵逼:
寻思一会:肯定有他的实现类:
ctrl+H:
眼前一亮:出现下面一段
/**
 * HttpUrlConnection方式实现
 *
 * @author kymjs (http://www.kymjs.com/) .
 */
public class HttpConnectStack implements HttpStack {

    private static final String HEADER_CONTENT_TYPE = "Content-Type";

    private final UrlRewriter mUrlRewriter;

总结:此网络框架基于
 HttpUrlConnection

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南一舟110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值