Android快速开发框架之xUtils---网络模块
16lz
2021-01-23
本篇博客将介绍一下xUtils的网络模块,想要学习的小伙伴请先看第一篇Android快速开发框架之xUtils—注解模块需要完成第一第二步哦。
1.添加所需要的权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.使用Get请求获取网络数据,详细信息请看代码注释
@Event(R.id.get) private void get(View view) { //请求参数 RequestParams params = new RequestParams("http://www.omghz.cn/FirstService/getString"); //添加请求参数// params.addQueryStringParameter("username", "小明");// params.addQueryStringParameter("password", "123456"); //Callback.CommonCallbackString-->请求成功后返回的数据类型 Callback.Cancelable cancelable = x.http().get(params, new Callback.CommonCallback() { @Override public void onSuccess(String result) { //请求成功回调,result:返回的结果 textView.setText("Get: " + result); } @Override public void onError(Throwable ex, boolean isOnCallback) { //请求发生异常回调 //ex--->异常信息 //isOnCallback--->true说明异常信息来源于回调方法(onSuccess,onCancelled,onFinished) //isOnCallback--->false说明不是来源于回调方法 } @Override public void onCancelled(CancelledException cex) { //主动调用取消请求后回调 } @Override public void onFinished() { //不管成功失败都会回调 } });// cancelable.cancel();//将会调用onCancelled() }
3.使用Post请求获取网络数据
@Event(R.id.post) private void post(View view) { String path = "http://www.omghz.cn/FirstService/getString"; RequestParams params = new RequestParams(path); //将请求参数添加至body中 params.addBodyParameter("username", "小明"); //根据请求方式不同将参数添加至body或链接地址后面 params.addBodyParameter("password", "123456"); x.http().post(params, new Callback.CommonCallback() { @Override public void onSuccess(String result) { textView.setText("Post: " + result); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }
4.使用其它请求方式
@Event(R.id.other) private void other() { RequestParams params = new RequestParams("http://www.omghz.cn/FirstService/getString"); //第一个参数即为请求方式 x.http().request(HttpMethod.GET, params, new Callback.CommonCallback() { @Override public void onSuccess(String result) { textView.setText("Other: " + result); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }
5.上传文件至服务器,这个就需要与服务端沟通好用什么姿势上传比较好。
@Event(R.id.upload) private void upLoad(View view) { //上传文件的路径 String path = Environment.getExternalStorageDirectory() + "/1.docx"; //上传到至服务器的地址 String url = "http://www.omghz.cn/FirstService/FileReceive"; RequestParams params = new RequestParams(url); //使用Multipart表单上传 //params.setMultipart(true); params.addHeader("FileName", "1.docx"); File file = new File(path); params.addBodyParameter("File", file); x.http().post(params, new Callback.CommonCallback() { @Override public void onSuccess(String result) { Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }
6.从服务器上下载文件,使用Callback.ProgressCallback<>带有进度的回调接口
@Event(R.id.download) private void downLoad(View view) { String url = "http://www.omghz.cn/FirstService/File/SwipeBack.apk"; RequestParams params = new RequestParams(url); //设置文件保存路径 params.setSaveFilePath(Environment.getExternalStorageDirectory()); //设置自动找寻文件名字 params.setAutoRename(true); x.http().get(params, new Callback.ProgressCallback() { @Override public void onSuccess(File result) { //我这下载的是一个apk,所以下载完成自动启动安装 Intent intent = new Intent(); intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive"); getActivity().startActivity(intent); } @Override public void onLoading(long total, long current, boolean isDownloading) { //这里可以获取到下载文件的大小,当前下载进度 seekBar.setMax((int) total); seekBar.setProgress((int) current); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } @Override public void onWaiting() { //网络请求之前被调用,最先被调用 } @Override public void onStarted() { //网络请求开始的时候回调 } }); }
7.网络请求带缓存,具体看onCache回调方法
@Event(R.id.cache) private void cache(View view) { String url = "http://www.omghz.cn/FirstService/getString"; RequestParams params = new RequestParams(url); //添加缓存时间-->单位ms params.setCacheMaxAge(1000 * 60); x.http().get(params, new Callback.CacheCallback() { @Override public void onSuccess(String result) { textView.setText("Cache: " + result); } @Override public boolean onCache(String result) { //result--->缓存内容 //如果返回true则相信本地缓存,在60s之内再次调用get请求,onSuccess返回为空 //如果返回false则不相信本地缓存,在60s之内再次调用get请求,onSuccess有返回值 return false; } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }
效果图
xUtils中网络模块大致就包括这些部分,这也是我们开发中比较常用的。具体学习资料可以去极客学院
学习,接下来我们在说一说图片模块。
项目地址:https://github.com/azhong1011/xUtils
更多相关文章
- Android WebView缓存机制详解
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原
- Android核心模块及相关技术介绍
- picasso-强大的Android图片下载缓存库
- android强大的图片下载和缓存库Picasso
- Android核心模块内容概述 2012.07.25
- Android 组件化的应用 模块通信问题解决
- Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
- Android Mediaplayer error (1, -2147483648) Error (-38,0)解决