xUtils3是安卓网络访问的重要库,基本上的网络请求所涉及的内容都有集成。笔者将实现xUtils3的简单使用,包括简单GET和POST请求、文件上传、文件下载、图片显示。
其主要特性有以下几点:
①提供异步网络请求
②支持超大文件(超过2G)上传
③有了强大的http及其下载缓存的支持,支持文件断点续传
④全面的http请求协议支持(GET,POST等)
⑤图片绑定支持gif(受系统兼容性影响,部分gif文件只能静态显示),支持圆角、圆形、方形显示图片,支持图片裁剪,支持自动旋转
初始化工作:
添加依赖
1 compile 'org.xutils:xutils:3.4.0'
新建初始化类
新建一个类:Xutilsinit,将新建的类放在MainActivity同级目录下(同一个包下)即可
1 import org.xutils.x;2 class Xutilsinit extends Application {3 @OverrIDe4 public voID onCreate() {5 super.onCreate();6 x.Ext.init(this);7 x.Ext.setDeBUG(true);//是否输出DeBUG日志8 }9 }
必要权限获取及类声明
在AndroIDManifest.xml,第一个权限为网络访问权限,第二个为文件读写权限,文件读写权限在某些手机上是需要另外手动获取,否则将影响文件的上传和下载功能。
<uses-permission androID:name="androID.permission.INTERNET" />="androID.permission.WRITE_EXTERNAL_STORAGE" />
简单的GET和POST请求实现:
不用自己另起线程,直接在主线程写就好了,框架实现了线程访问。
1 /设置需要访问的URL 2 String url="http://193.112.87.88/library/user_login.PHP"; 3 4 5 设置post表单数据,以键值对设置 6 RequestParams params =new RequestParams(url); 7 params.addBodyParameter("account","164" 8 params.addBodyParameter("password","dong" 9 10 简单的加载提示框11 final ProgressDialog dia=new ProgressDialog(MainActivity.12 dia.setMessage("东小东加载中……"13 dia.show();14 15 开始网络访问16 如果是get请求,则x.http().get(params,new Callback.CommonCallback<String>() 即可17 x.http().post(params,new Callback.CommonCallback<String>() {18 19 onSuccess(String result) {20 访问成功时进入,得到访问返回的数据21 Toast.makeText(x.app(),"东小东提示获取的数据为:"+ result,Toast.LENGTH_LONG).show();22 System.out.println("获取到的数据是"+result);23 24 25 26 27 voID onError(Throwable ex,1)">boolean isOnCallback) {28 请求错误进入29 Toast.makeText(x.app(),"东小东提示:请求错误",1)">30 31 32 33 34 onCancelled(Callback.CancelledException cex) {35 ////主动调用取消请求的回调方法36 37 38 39 onFinished() {40 访问结束时进入,停止加载框41 dia.dismiss();42 43 });
POST文件上传:
利用POST提交表单的形式进行文件上传,其中params.setMultipart(true);是表示使用二进制的方式上传数据,需要进行文件上传时必须加入这句。
1 设置需要访问的URL 2 String url="http://193.112.87.55/file1.PHP" 5 6 RequestParams params = 7 params.setMultipart(true 8 params.addBodyParameter("yzm","112233"file filex= new file(Environment.getExternalStorageDirectory()+"/东小东.jpg"); params.addBodyParameter("img",filex,"multipart/form-data","dongxiaodong.jpg");其中dongxiaodong.jpg为重命名12 13 生成文件对象,需要绝对路径14 file filex= new file(Environment.getExternalStorageDirectory()+"/gg.mp3"15 params.addBodyParameter("img","multipart/form-data");保留文件原名16 17 18 19 20 dia.setMessage("东小东加载中……"21 dia.show();22 23 开始网络访问24 x.http().post(params,1)">25 @OverrIDe26 27 28 Toast.makeText(x.app(),1)">29 System.out.println("获取到的数据是"+30 }34 35 36 Toast.makeText(x.app(),1)">39 40 41 42 43 Toast.makeText(x.app(),"东小东提示:已取消请求"44 45 46 47 48 49 Toast.makeText(x.app(),"东小东提示:完成请求"50 dia.dismiss();51 52 });
文件下载实现:
文件下载时使用异步任务进行的,其还实现了断点续传功能,观看下载文件夹可了解到下载时会自动生成一个缓存文件存放下载内容。基本判断应该是下次下载时会将下载文件与缓存文件进行对比,而实现断点续传功能。
private downloadUpdateApk() { 2 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 4 5 6 dia.setMessage("东小东马上下载中........" 7 dia.show(); 8 9 下载地址10 RequestParams requestParams = new RequestParams("http://193.112.87.88/filexxx/gg.mp3"11 文件下载后的保存路径及文件名12 requestParams.setSavefilePath(Environment.getExternalStorageDirectory()+"/dongxiaodong/东小东.mp3"13 下载完成后自动为文件命名14 requestParams.setautoRename(false15 下载请求16 x.http().get(requestParams,1)">new Callback.ProgressCallback<file> @OverrIDe19 onSuccess(file result) {20 倒数第二调用21 Toast.makeText(MainActivity.this,"下载完成"22 System.out.println("---------------下载完成---------------------------"23 dia.setMessage("东小东下载完成**" }27 28 Toast.makeText(MainActivity.29 System.out.println("---------------下载失败---------------------------"34 onCancelled(CancelledException cex) {35 36 Toast.makeText(MainActivity.37 System.out.println("---------------取消下载---------------------------"41 42 最后调用43 Toast.makeText(MainActivity.44 System.out.println("---------------下载结束---------------------------"45 dia.dismiss();46 47 48 49 50 onWaiting() {51 最开始调用52 Toast.makeText(MainActivity.53 System.out.println("---------------等待下载---------------------------"54 55 56 57 58 onStarted() {59 第二调用60 Toast.makeText(MainActivity.61 System.out.println("---------------开始下载---------------------------"62 dia.setMessage("东小东下载开始----"63 64 65 66 voID onLoading(long total,1)">long current,1)"> isDownloading) {67 当前的下载进度和文件总大小68 下载的时候不断回调的方法69 参数:总大小,已经下载的大小,是否正在下载70 System.out.println("***"+total+"********"+current+"****************"+isDownloading+"**********"71 百分比为整数72 System.out.println("下载进度为:"+(int)(((float)current/total)*100)+"%"73 百分比为小数74 dia.setMessage("东小东下载进度为:"+((float)current/total)*100+"%"75 76 77 });78 79 80 }
图片显示:
ImageOptions是强大的网络图片加载显示的工具类,可以实现图片的缓存、图片的直角、圆角、圆形显示及图片的裁剪,另外还支持gif动态显示。
显示效果
图片显示封装类
androID.Widget.ImageVIEw; 2 org.xutils.common.util.DensityUtil; 3 org.xutils.image.ImageOptions; 4 5 6 /** * Created by 东东 on 2018/12/29. 8 */ 9 class ShowImage {10 11 显示默认图片,参数(图片控件,图片地址),地址可为网络或本地地址12 static displaydDfault(ImageVIEw imageVIEw,String iconUrl) {13 ImageOptions imageOptions = ImageOptions.Builder()14 .setIgnoreGif(false)是否忽略gif图。false表示不忽略。不写这句,默认是true .setimageScaleType(ImageVIEw.ScaleType.CENTER_CROP)16 .setIgnoreGif(是否忽略gif图,false表示不忽略,不写这句,默认是true17 .setUseMemCache(true)是否支持缓存18 .setFailureDrawableID(R.mipmap.ic_launcher)设置加载失败显示的图片19 .setLoadingDrawableID(R.mipmap.ic_launcher)设置加载中显示的图片20 .build(); x.image().bind(imageVIEw,iconUrl,imageOptions);22 24 显示圆角图片,参数(图片控件,圆角半径,图片地址),地址可为网络或本地地址25 圆角半径,100为圆形26 voID displayCutR(ImageVIEw imageVIEw,1)">int radius,1)">27 ImageOptions imageOptions = 28 .setSize(DensityUtil.dip2px(120),DensityUtil.dip2px(120))图片大小29 30 .seTradius(DensityUtil.dip2px(radius))31 .setIgnoreGif(32 .setCrop(是否对图片进行裁剪 .setFailureDrawableID(R.mipmap.ic_launcher)34 .setLoadingDrawableID(R.mipmap.ic_launcher)35 37 38 40 显示圆形图片,参数(图片控件,图片地址),地址可为网络或本地地址41 displayRoundness(ImageVIEw imageVIEw,1)">42 ImageOptions imageOptions = 43 44 .setCircular(显示圆形,半径根据控件控制45 .setCrop()46 .setIgnoreGif(48 52 }
在需要显示中使用
图片地址 2 String urlx="https://timgsa.baIDu.com/timg?image&quality=80&size=b9999_10000&sec=1546085784363&di=8ab50ca92e77dcc09ef658b636872f51&imgtype=0&src=http%3A%2F%2Fi0.bbs.fd.zol-img.com.cn%2Ft_s800x5000%2Fg5%2FM00%2F0D%2F05%2FChMkJlnHskGIC8gjAAJBAWB0pxwAAgwNgI_jqMAAkEZ946.jpg"找到imgvIEw控件 5 main_img1=(ImageVIEw)findVIEwByID(R.ID.main_img1);传递参数,显示图片到控件上ShowImage.displaydDfault(main_img1,urlx); 8 9 main_img2=(ImageVIEw)findVIEwByID(R.ID.main_img2);10 ShowImage.displayCutR(main_img2,3011 12 13 main_img3=(ImageVIEw)findVIEwByID(R.ID.main_img3);14 ShowImage.displayRoundness(main_img3,urlx);
参考:
https://github.com/wyouflf/xUtils3
https://blog.csdn.net/u014620028/article/details/51063377
总结
以上是内存溢出为你收集整理的安卓网络访问(xUtils3)全部内容,希望文章能够帮你解决安卓网络访问(xUtils3)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)