KJHttp网络框架使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30519365/article/details/56483696
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

猜你喜欢

转载自blog.csdn.net/qq_30519365/article/details/56483696