本篇博客将介绍一下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() {            }        });    }

效果图

Android快速开发框架之xUtils---网络模块_第1张图片

xUtils中网络模块大致就包括这些部分,这也是我们开发中比较常用的。具体学习资料可以去极客学院学习,接下来我们在说一说图片模块。

项目地址:https://github.com/azhong1011/xUtils

更多相关文章

  1. Android WebView缓存机制详解
  2. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原
  3. Android核心模块及相关技术介绍
  4. picasso-强大的Android图片下载缓存库
  5. android强大的图片下载和缓存库Picasso
  6. Android核心模块内容概述 2012.07.25
  7. Android 组件化的应用 模块通信问题解决
  8. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
  9. Android Mediaplayer error (1, -2147483648) Error (-38,0)解决

随机推荐

  1. Android三种动画详解
  2. android ListView中添加ImageButton按钮
  3. [Android分享] 如何解决Android(安卓)5.0
  4. android native c 的so调试
  5. Android(安卓)关闭/打开多点触控 (Android
  6. Android三种常用动画分享
  7. android中android:wight详解
  8. android 获取路径目录方法以及判断目录是
  9. AndroidManifest.xml中uses-sdk配置详解
  10. Android实训(一)小记