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,第一个权限为网络访问权限,第二个为文件读写权限,文件读写权限在某些手机上是需要另外手动获取,否则将影响文件的上传和下载功能。
1 <uses-permission android:name="android.permission.INTERNET" />2 <uses-permission android:name="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.this);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 @Override19 public void onSuccess(String result) {20 //访问成功时进入,得到访问返回的数据21 Toast.makeText(x.app(),"东小东提示获取的数据为:"+ result, Toast.LENGTH_LONG).show();22 System.out.println("获取到的数据是"+result);23 24 }25 26 @Override27 public void onError(Throwable ex, boolean isOnCallback) {28 //请求错误进入29 Toast.makeText(x.app(),"东小东提示:请求错误", Toast.LENGTH_LONG).show();30 31 }32 33 @Override34 public void onCancelled(Callback.CancelledException cex) {35 ////主动调用取消请求的回调方法36 }37 38 @Override39 public void onFinished() {40 //访问结束时进入,停止加载框41 dia.dismiss();42 }43 });
POST文件上传:
利用POST提交表单的形式进行文件上传,其中params.setMultipart(true);是表示使用二进制的方式上传数据,需要进行文件上传时必须加入这句。
1 //设置需要访问的URL 2 String url="http://193.112.87.55/file1.php"; 3 4 5 //设置post表单数据,以键值对设置 6 RequestParams params =new RequestParams(url); 7 params.setMultipart(true); 8 params.addBodyParameter("yzm","112233"); 9 10 //File filex= new File(Environment.getExternalStorageDirectory()+"/东小东.jpg");11 // 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", filex, "multipart/form-data");//保留文件原名16 17 18 //简单的加载提示框19 final ProgressDialog dia=new ProgressDialog(MainActivity.this);20 dia.setMessage("东小东加载中……");21 dia.show();22 23 //开始网络访问24 x.http().post(params, new Callback.CommonCallback<String>() {25 @Override26 public void onSuccess(String result) {27 //访问成功时进入,得到访问返回的数据28 Toast.makeText(x.app(),"东小东提示获取的数据为:"+ result, Toast.LENGTH_LONG).show();29 System.out.println("获取到的数据是"+result);30 31 }32 33 @Override34 public void onError(Throwable ex, boolean isOnCallback) {35 //请求错误进入36 Toast.makeText(x.app(),"东小东提示:请求错误", Toast.LENGTH_LONG).show();37 38 }39 40 @Override41 public void onCancelled(Callback.CancelledException cex) {42 ////主动调用取消请求的回调方法43 Toast.makeText(x.app(),"东小东提示:已取消请求", Toast.LENGTH_LONG).show();44 }45 46 @Override47 public void onFinished() {48 //访问结束时进入,停止加载框49 Toast.makeText(x.app(),"东小东提示:完成请求", Toast.LENGTH_LONG).show();50 dia.dismiss();51 }52 });
文件下载实现:
文件下载时使用异步任务进行的,其还实现了断点续传功能,观看下载文件夹可了解到下载时会自动生成一个缓存文件存放下载内容。基本判断应该是下次下载时会将下载文件与缓存文件进行对比,而实现断点续传功能。
1 private void downloadUpdateApk() { 2 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 3 4 //简单的加载提示框 5 final ProgressDialog dia=new ProgressDialog(MainActivity.this); 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(false);15 //下载请求16 x.http().get(requestParams, new Callback.ProgressCallback<File>() {17 18 @Override19 public void onSuccess(File result) {20 //倒数第二调用21 Toast.makeText(MainActivity.this,"下载完成",Toast.LENGTH_SHORT).show();22 System.out.println("---------------下载完成---------------------------");23 dia.setMessage("东小东下载完成**");24 }25 26 @Override27 public void onError(Throwable ex, boolean isOnCallback) {28 Toast.makeText(MainActivity.this,"下载失败",Toast.LENGTH_SHORT).show();29 System.out.println("---------------下载失败---------------------------");30 31 }32 33 @Override34 public void onCancelled(CancelledException cex) {35 36 Toast.makeText(MainActivity.this,"取消下载",Toast.LENGTH_SHORT).show();37 System.out.println("---------------取消下载---------------------------");38 }39 40 @Override41 public void onFinished() {42 //最后调用43 Toast.makeText(MainActivity.this,"下载结束",Toast.LENGTH_SHORT).show();44 System.out.println("---------------下载结束---------------------------");45 dia.dismiss();46 47 }48 49 @Override50 public void onWaiting() {51 // 最开始调用52 Toast.makeText(MainActivity.this,"等待下载",Toast.LENGTH_SHORT).show();53 System.out.println("---------------等待下载---------------------------");54 55 }56 57 @Override58 public void onStarted() {59 //第二调用60 Toast.makeText(MainActivity.this,"开始下载",Toast.LENGTH_SHORT).show();61 System.out.println("---------------开始下载---------------------------");62 dia.setMessage("东小东下载开始----");63 }64 65 @Override66 public void onLoading(long total, long current, boolean 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动态显示。
显示效果
图片显示封装类
1 import android.widget.ImageView; 2 import org.xutils.common.util.DensityUtil; 3 import org.xutils.image.ImageOptions; 4 import org.xutils.x; 5 6 /** 7 * Created by 东东 on 2018/12/29. 8 */ 9 public class ShowImage {10 11 //显示默认图片,参数(图片控件,图片地址),地址可为网络或本地地址12 public static void displaydDfault(ImageView imageView, String iconUrl) {13 ImageOptions imageOptions = new ImageOptions.Builder()14 .setIgnoreGif(false)//是否忽略gif图。false表示不忽略。不写这句,默认是true15 .setImageScaleType(ImageView.ScaleType.CENTER_CROP)16 .setIgnoreGif(false)//是否忽略gif图,false表示不忽略,不写这句,默认是true17 .setUseMemCache(true)//是否支持缓存18 .setFailureDrawableId(R.mipmap.ic_launcher)//设置加载失败显示的图片19 .setLoadingDrawableId(R.mipmap.ic_launcher)//设置加载中显示的图片20 .build();21 x.image().bind(imageView, iconUrl,imageOptions);22 }23 24 //显示圆角图片,参数(图片控件,圆角半径,图片地址),地址可为网络或本地地址25 //圆角半径,100为圆形26 public static void displayCutR(ImageView imageView, int radius, String iconUrl) {27 ImageOptions imageOptions = new ImageOptions.Builder()28 // .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))//图片大小29 .setImageScaleType(ImageView.ScaleType.CENTER_CROP)30 .setRadius(DensityUtil.dip2px(radius))31 .setIgnoreGif(false)//是否忽略gif图,false表示不忽略,不写这句,默认是true32 .setCrop(true)//是否对图片进行裁剪33 .setFailureDrawableId(R.mipmap.ic_launcher)34 .setLoadingDrawableId(R.mipmap.ic_launcher)35 .build();36 x.image().bind(imageView, iconUrl, imageOptions);37 }38 39 40 //显示圆形图片,参数(图片控件,图片地址),地址可为网络或本地地址41 public static void displayRoundness(ImageView imageView, String iconUrl) {42 ImageOptions imageOptions = new ImageOptions.Builder()43 .setImageScaleType(ImageView.ScaleType.CENTER_CROP)44 .setCircular(true)//显示圆形,半径根据控件控制45 .setCrop(true)46 .setIgnoreGif(false)//是否忽略gif图,false表示不忽略,不写这句,默认是true47 .setLoadingDrawableId(R.mipmap.ic_launcher)48 .setFailureDrawableId(R.mipmap.ic_launcher)49 .build();50 x.image().bind(imageView, iconUrl, imageOptions);51 }52 }
在需要显示中使用
1 //图片地址 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"; 3 4 //找到imgview控件 5 main_img1=(ImageView)findViewById(R.id.main_img1); 6 //传递参数,显示图片到控件上 7 ShowImage.displaydDfault(main_img1,urlx); 8 9 main_img2=(ImageView)findViewById(R.id.main_img2);10 ShowImage.displayCutR(main_img2,30,urlx);11 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
原文出处:https://www.cnblogs.com/dongxiaodong/p/10243430.html
作者:东小东
共同学习,写下你的评论
评论加载中...
作者其他优质文章