使用:
Android studio用户只需要在build.gradle添加依赖就可以使用了:

// 引用最新版compile 'com.yolanda.nohttp:nohttp:+'// 或则引用指定版本compile 'com.yolanda.nohttp:nohttp:1.0.0'

我也不知道为什么辣么神奇,这样就直接可以使用了,不用拷贝架包到libs下,也不用添加依赖module就这样一句代码就可以使用,哎,是不是谷歌官方有一个库用来保存这些第三方架包,然后在gradle中添加一句话就可以使用了?
初始化请求队列:

RequestQueue queue = NoHttp.newRequestQueue();

我一开始使用NoHttp的时候程序运行到这一步报异常Exceptionininitializererror,百度了一下说这个异常一般是静态变量初始化顺序不对所引起的。我还以为是NoHttp内部的问题,结果我在下载的Demo中看到在其Appalication中还有这样一句代码:

NoHttp.init(this);

参数为Appalication对象
然后我在初始化请求队列之前执行了这样一句代码之后就没报错了。
关于请求队列,推荐使用全局唯一队列;
贴代码:
简单请求字符串:
相关权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

我试了一下,把相关权限去掉都不会报错…
Appliction:

package wkk.test;import android.app.Application;import com.yolanda.nohttp.NoHttp;import com.yolanda.nohttp.RequestQueue;/** * Created by wkk on 2016/4/29. * Application-全局唯一,可以看成是默认的单例模式* 可用来存储全局变量*/public class MyApplication extends Application {public static RequestQueue queue = null;@Overridepublic void onCreate() {super.onCreate();//初始化NoHttpNoHttp.init(this);//初始化请求队列queue = NoHttp.newRequestQueue();    }}

设置Application:

<applicationandroid:name=".MyApplication"

xml代码过于简单,里面就一个Button,所以就不贴了。
其请求是异步的所以不需要另外开启线程
Mainactivity:

package wkk.test;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import com.yolanda.nohttp.NoHttp;import com.yolanda.nohttp.OnResponseListener;import com.yolanda.nohttp.Request;import com.yolanda.nohttp.RequestMethod;import com.yolanda.nohttp.Response;import My.Utils.Utils;public class MainActivity extends AppCompatActivity {private int WHAT = 0;private String url = "http://fanyi.youdao.com/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }//点击事件public void onClick(View view) {        reques();    }private void reques() {//String为泛型 NoHttp.createStringRequest(url, 请求方式);Request request = NoHttp.createStringRequest(url, RequestMethod.GET);//request.add();可添加参数//request.addHeader("","");设置请求头//request.setTag();设置Object类型的TAG        //将request添加到queue请求队列中// 参数1.int what标识本请求//    2.request        //    3.OnResponseListener监听MyApplication.queue.add(WHAT, request, new OnResponseListener() {@Overridepublic void onStart(int what) {//可以在此方法开启DialogUtils.i("开始:" + String.valueOf(what));            }@Overridepublic void onSucceed(int what, Response response) {//what的作用,多个请求公用一个监听时,就像是idif (what == WHAT) {                    Utils.i("成功:" + response.get());                    response.get();//请求的结果返回值为 泛型 Tresponse.getByteArray();//结果的字节数组response.getTag();//获得设置的TAGresponse.getNetworkMillis();//请求花费时间response.getHeaders();//响应头response.getHeaders().getResponseCode();//响应码response.isSucceed();//请求是否成功response.isFromCache();//是否是从缓存中获取}            }@Overridepublic void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {//传下来的每个值都很容易从其名称看出来作用//networkMillis--请求消耗的时间Utils.i("失败:" + String.valueOf(what));                Utils.i("失败:" + exception.toString());                Utils.i("失败:" + responseCode);            }@Overridepublic void onFinish(int what) {//可以在此方法关闭DialogUtils.i("结束:" + String.valueOf(what));            }        });    }}

运行结果:
Android NoHttp基础详解_第1张图片
下面我们来看一下如何加载一张图片:
其实也很简单,在xml里面添加一个ImageView用来加载完成后显示图片
对刚刚的代码稍作修改:

private String url = "http://e.hiphotos.baidu.com/image/h%3D300/sign=37898e6af036afc3110c39658318eb85/908fa0ec08fa513d1251af743a6d55fbb3fbd9a5.jpg";
Request request = NoHttp.createImageRequest(url, RequestMethod.GET);
MyApplication.queue.add(WHAT, request, new OnResponseListener() {@Overridepublic void onStart(int what) {        Utils.i("开始:" + String.valueOf(what));    }@Overridepublic void onSucceed(int what, Response response) {if (what == WHAT) {imageView.setImageBitmap(response.get());        }    }@Overridepublic void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {//传下来的每个值都很容易从其名称看出来作用//networkMillis--请求消耗的时间Utils.i("失败:" + String.valueOf(what));        Utils.i("失败:" + exception.toString());        Utils.i("失败:" + responseCode);    }@Overridepublic void onFinish(int what) {        Utils.i("结束:" + String.valueOf(what));    }});

请求结果:
Android NoHttp基础详解_第2张图片
还有相对应的JSONObject以及JSONArray:

Request request = NoHttp.createJsonObjectRequest(url, RequestMethod.GET);
Request request = NoHttp.createJsonArrayRequest(url, RequestMethod.GET);

RequestQueue的相关方法:

MyApplication.queue.cancelBySign(request);//清空单个指定请求MyApplication.queue.cancelAll();//清空请求列队MyApplication.queue.start();//开始MyApplication.queue.stop();//停止

文件下载:
文件下载有其有专门的请求及队列,所以我们要再Application中加入这个下载队列

public class MyApplication extends Application {public static RequestQueue requestQueue = null;//请求队列public static DownloadQueue downloadQueue;//下载队列@Overridepublic void onCreate() {super.onCreate();//初始化NoHttpNoHttp.init(this);//初始化请求队列requestQueue = NoHttp.newRequestQueue();downloadQueue = NoHttp.newDownloadQueue();    }}Activity:package wkk.test;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import com.yolanda.nohttp.Headers;import com.yolanda.nohttp.NoHttp;import com.yolanda.nohttp.download.DownloadListener;import com.yolanda.nohttp.download.DownloadRequest;public class Main2Activity extends AppCompatActivity implements View.OnClickListener {    private int WHAT = 0;    private Button buttona, buttonb;    private String url = "http://gdown.baidu.com/data/wisegame/00d935b62e77cfc1/weixin_780.apk";    private DownloadRequest downloadRequest;//下载请求    private ProgressBar mProgressBar;    private static final String CancelSign = "CancelSign";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        buttona = (Button) findViewById(R.id.buttona);        buttonb = (Button) findViewById(R.id.buttonb);        mProgressBar = (ProgressBar) findViewById(R.id.pb_progress);        buttona.setOnClickListener(this);        buttonb.setOnClickListener(this);        //说明一下下面的几个参数        //1.url        //2.文件存储路径        //3.文件名        //4.断点是否继续        //5.是否删除旧的        downloadRequest = NoHttp.createDownloadRequest(url,                Environment.getExternalStorageDirectory().getPath(),                "weiixn.apk",                true,                false);        downloadRequest.setCancelSign(CancelSign);//设置停止下载的记号    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.buttona:                down();                break;            case R.id.buttonb:                stop();                break;        }    }    private void stop() {        downloadRequest.cancelBySign(CancelSign);//通过记号停止下载    }    private void down() {        check();        MyApplication.downloadQueue.add(WHAT, downloadRequest, new DownloadListener() {            @Override            public void onDownloadError(int what, Exception exception) {                //下载异常                Utils.i("下载异常:" + exception.toString());            }            @Override            public void onStart(int what, boolean isResume, long rangeSize, Headers responseHeaders, long allCount) {                //开始下载                //what                //isResume 是否重新下载                //rangeSize 已下载文件大小                //responseHeaders                //allCount 文件总大小                //int progress = (int) (rangeSize * 100 / allCount); 下载进度            }            @Override            public void onProgress(int what, int progress, long fileCount) {                //下载进度                //progress 进度                //fileCount 文件大小                mProgressBar.setProgress(progress);            }            @Override            public void onFinish(int what, String filePath) {                //下载完成                //filePath 文件路径            }            @Override            public void onCancel(int what) {                //下载取消            }        });    }    private void check() {        // 检查之前的下载状态        int beforeStatus = downloadRequest.checkBeforeStatus();        switch (beforeStatus) {            case DownloadRequest.STATUS_RESTART:                mProgressBar.setProgress(0);                Utils.toast(Main2Activity.this, "开始下载");                break;            case DownloadRequest.STATUS_RESUME:                Utils.toast(Main2Activity.this, "正在下载");                break;            case DownloadRequest.STATUS_FINISH:                mProgressBar.setProgress(100);                Utils.toast(Main2Activity.this, "下载完成");                break;        }    }}

源码下载:
http://download.csdn.net/detail/w18756901575/9508658


2016/11/04 10:51
Nohttp在不断更新,上面的已经时以前版本的了,现在附上官方说明文档:
http://doc.nohttp.net/162186

更多相关文章

  1. Android手机拨打电话、手动发送短信与自动拨打电话、自动发送短
  2. Android SDK编译 ——如何将自己源代码加入android.jar
  3. Android 高级混淆和代码保护技术
  4. Android Audio代码分析1 - AudioTrack使用示例
  5. Android 动态加载APK--代码安装、获取资源及Intent调用已安装apk
  6. Android通用初始化Activity模板
  7. Android 中颜色对应的代码集合
  8. 《Android 编程权威指南》(Android Programming The Big Nerd Ran
  9. 美团,大众点评,悬浮窗功能代码

随机推荐

  1. Centos 安装 docker
  2. 利用for循环做99乘法表
  3. 访问器属性 获取dom元素
  4. 多人语音房社交APP海外搭建部署业务处理
  5. 零基础简单易用的EmberJS框架
  6. 实战-TP数据库操作(一)
  7. 淘宝首页商品栏
  8. Js基础知识:Js实现制作简单的计算器和九九
  9. 倒99乘法
  10. 简易计算器