时间:2022-01-10 15:18:30 | 栏目:Android代码 | 点击:次
NoHttp是专门做Android网络请求与下载的框架,NoHttp基本使用方法如下
本文demo源码下载地址: http://xiazai.jb51.net/201609/yuanma/AndroidNoHttp(jb51.net).rar
本文的例子来自上面的demo中的OriginalActivity中。
代码
对于新手, 看别人封装好的代码允许要稍微吃力一点,尤其是一个框架,所以我们先看NoHttp最原始的使用方法:
public class OriginalActivity extends BaseActivity implements View.OnClickListener { /** * 用来标志请求的what, 类似handler的what一样,这里用来区分请求 */ private static final int NOHTTP_WHAT_TEST = 0x001; /** * 请求的时候等待框 */ private WaitDialog mWaitDialog; /** * 请求队列 */ private RequestQueue requestQueue; @Override protected void onActivityCreate(Bundle savedInstanceState) { setTitle(Application.getInstance().nohttpTitleList[0]); setContentView(R.layout.activity_original); // 按钮点击监听 findView(R.id.btn_start).setOnClickListener(this); mWaitDialog = new WaitDialog(this); // 创建请求队列, 默认并发3个请求, 传入数字改变并发数量: NoHttp.newRequestQueue(1); requestQueue = NoHttp.newRequestQueue(); } @Override public void onClick(View v) { // 创建请求对象 Request<String> request = NoHttp.createStringRequest(url, RequestMethod.POST); // 添加请求参数 request.add("userName", "yolanda"); request.add("userPass", 1); request.add("userAge", 1.25); // 上传文件 request.add("userHead", new FileBinary(new File(path))); // 添加请求头 request.addHeader("Author", "nohttp_sample"); // 设置一个tag, 在请求完(失败/成功)时原封不动返回; 多数情况下不需要 // request.setTag(object); /* * what: 当多个请求同时使用同一个OnResponseListener时用来区分请求, 类似handler的what一样 * request: 请求对象 * onResponseListener 回调对象,接受请求结果 */ requestQueue.add(NOHTTP_WHAT_TEST, request, onResponseListener); } /** * 回调对象,接受请求结果 */ private OnResponseListener<String> onResponseListener = new OnResponseListener<String>() { @SuppressWarnings("unused") @Override public void onSucceed(int what, Response<String> response) { if (what == NOHTTP_WHAT_TEST) {// 判断what是否是刚才指定的请求 // 请求成功 String result = response.get();// 响应结果 // 响应头 Headers headers = response.getHeaders(); headers.getResponseCode();// 响应码 response.getNetworkMillis();// 请求花费的时间 } } @Override public void onStart(int what) { // 请求开始,显示dialog mWaitDialog.show(); } @Override public void onFinish(int what) { // 请求结束,关闭dialog mWaitDialog.dismiss(); } @Override public void onFailed(int what, String url, Object tag, CharSequence error, int resCode, long ms) { // 请求失败 ... } }; @Override protected void onDestroy() { super.onDestroy(); requestQueue.cancelAll();// 退出APP时停止所有请求 requestQueue.stop();// 退出APP时停止队列 } }