2025年4月1日 星期二 乙巳(蛇)年 正月初二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

KJFrameForAndroid 之 HttpLibrary

时间:12-14来源:作者:点击数:1
CDSY,CDSY.XYZ

KJHttp 简介

KJHttp 是专为解决 Android 中 Http 通信而产生的,它在请求和响应层面做到了全自动构建和解析,主要用于 Android 快速开发。

整个 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 相应的方法

更加方便

KJHttp 自带了数据缓存功能,你所访问的Http数据都将在本地建立一个缓存,默认的缓存时间是5分钟,也就是5分钟以内相同的请求都不会经过网络,而是从本地缓存中直接读取。当然对于及时性要求较高的新闻类应用,你也可以关闭这个特性或者只需要将缓存时间设置成0就行了~

使用方法

get 或 post 以 JSON 传参的方式请求数据示例

  • /**
  • * 使用JSON提交参数而不是Form表单
  • */
  • private void jsonRequest() {
  • KJHttp kjh = new KJHttp();
  • HttpParams params = new HttpParams();
  • params.putHeaders("Cookie", "cookie不能告诉你");
  • //这里传递json字符串,(JSONObject可以调用toString方法转换)
  • params.putJsonParams("{\"uid\":863548,\"stickys\":[{\"id\":29058,\"iid\":0,\"content\":\"你好\",\"color\":\"green\",\"createtime\":\"2015-04-16 16:26:17\",\"updatetime\":\"2015-04-16 16:26:17\"}]}");
  • kjh.jsonPost(
  • "http://www.oschina.net/action/api/team_stickynote_batch_update",
  • params, new HttpCallBack() {
  • @Override
  • public void onSuccess(String t) {
  • super.onSuccess(t);
  • toast(t);
  • }
  • });
  • }

get 或 post 以 AJAX 方式请求 JSON 数据示例

  • // 类似于 post,就只做一个介绍了
  • kjh.get("http://www.kymjs.com/", new HttpCallBack();
  • // post
  • KJHttp kjh = new KJHttp();
  • HttpParams params = new HttpParams();
  • params.put("id", "1"); //传递参数
  • params.put("name", "kymjs");
  • //HttpCallback中有很多方法,可以根据需求选择实现
  • kjh.post("http://192.168.1.149/post_api", params, new HttpCallBack() {
  • @Override
  • public void onPreStart() {
  • super.onPreStart();
  • KJLoger.debug("在请求开始之前调用");
  • }
  • @Override
  • public void onSuccess(String t) {
  • super.onSuccess(t);
  • ViewInject.longToast("请求成功");
  • KJLoger.debug("log:" + t.toString());
  • }
  • @Override
  • public void onFailure(Throwable t, int errorNo, String strMsg) {
  • super.onFailure(t, errorNo, strMsg);
  • KJLoger.debug("exception:" + strMsg);
  • }
  • @Override
  • public void onFinish() {
  • super.onFinish();
  • KJLoger.debug("请求完成,不管成功或者失败都会调用");
  • }
  • // ......
  • //还有更多,就不一一介绍了,大家可以参考API文档
  • // ......
  • });

post 上传文件

  • // 服务器端写法
  • <?php
  • if ($_FILES["file"]["error"] > 0)
  • {
  • echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
  • }
  • else
  • {
  • echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  • echo "Type: " . $_FILES["file"]["type"] . "<br />";
  • echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  • echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
  • if (file_exists("upload/" . $_FILES["file"]["name"]))
  • {
  • echo $_FILES["file"]["name"] . " already exists. ";
  • }
  • else
  • {
  • move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
  • echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  • }
  • }
  • ?>
  • //文件上传支持多文件上传,支持传file对象,byte[]两种
  • private void upload() {
  • HttpParams params = new HttpParams();
  • //support more file
  • params.put("file", FileUtils.getSaveFile("KJLibrary", "logo.jpg"));
  • params.put("file1", new File("/path/xxx/xxx")); // support
  • params.put("file2", new FileInputStream(file)); // support
  • kjh.post("http://192.168.1.149/kymjs/hello.php", params,
  • new HttpCallBack() {
  • @Override
  • public void onSuccess(String t) {
  • super.onSuccess(t);
  • ViewInject.toast("success");
  • }
  • @Override
  • public void onFailure(Throwable t, int errorNo,
  • String strMsg) {
  • super.onFailure(t, errorNo, strMsg);
  • ViewInject.toast("error" + strMsg);
  • }
  • /** 还有更多实现... **/
  • });
  • }

文件下载示例

  • kjh.download(mEtDownloadPath.getText().toString(), FileUtils.getSaveFile("KJLibrary", "l.pdf"),new HttpCallBack() {
  • @Override
  • public void onSuccess(File f) {
  • super.onSuccess(f);
  • KJLoger.debug("success");
  • ViewInject.toast("toast");
  • mProgress.setProgress(mProgress.getMax());
  • }
  • @Override
  • public void onFailure(Throwable t, int errorNo,String strMsg) {
  • super.onFailure(t, errorNo, strMsg);
  • KJLoger.debug("onFailure");
  • }
  • /* onLoading 方法就只在文件下载时才会被回调 */
  • @Override
  • public void onLoading(long count, long current) {
  • super.onLoading(count, current);
  • mProgress.setMax((int) count);
  • mProgress.setProgress((int) current);
  • KJLoger.debug(count + "------" + current);
  • }
  • });

高级设置

以上是基础用法,同样也支持自定义设置,你可以自定义数据缓存的方式,请求的优先级,请求数据的有效时间。同时支持根据你的需求所发起的自定义 Request。

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐