一、简介

xUtils3 是 xUtils 的升级版,功能和性能都在提高,xUtils3 主要有四大模块:注解模块,联 网模块,图片加载模块,数据库模块。
 
注解模块

用于在 Activity 或者 Fragment 中初始化布局文件,便于代码更加简洁。
 
联网模块

xUtils3 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词), 拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响。
 
图片加载模块

加载图片很方便并且不用担心内存溢出,还可以图片绑定支持 gif(受系统兼容 性影响, 部分 gif 文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转。
 
数据库模块

数据库 api 简化提高性能, 达到和 greenDao 一致的性能 。

xUtils3 的主要功能 :

1、注解

2、联网请求文本数据

3、大文件下载

4、大文件上传

5、请求图片

6、数据库模块达到和 greenDao 一致的性能

二、准备工作

下载地址: https://github.com/wyouflf/xUtils3

1、使用Gradle构建时添加一下依赖:

compile 'org.xutils:xutils:3.5.1'

2、需要添加的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3、初始化:

// 在application的onCreate中初始化
public class MyApplication extends Application {
@Override
public void onCreate() {super.onCreate();//xUtils3初始化x.Ext.init(this);//是否输出debug日志, 开启debug会影响性能.x.Ext.setDebug(BuildConfig.DEBUG);...
}
}

添加到 AndroidManifest.xml 的<application里面:

android:name=".MyApplication"

三、注解模块

1、在Activity中使用注解初始化布局:

步骤:

1.在 Application 的 oncreate 方法中加入下面代码:  x.Ext.init(this);  

2.在 Activity 的 oncreate 方法中加入下面代码:  x.view().inject(this);  

3.加载当前的 Activity 布局需要如下注解:  @ContentView 加入到 Activity 的上方

4.给 View 进行初始化需要如下注解:  @InjectView  

5.处理控件的各种响应事件需要如下注解:  @Enven

加载布局:

@ContentView(R.layout.activity_xutils3)
public class Xutils3Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_xutils3);x.view().inject(this);}
}

设置按钮的监听:

    @Event(value = R.id.btn_annotation)private void getEvent(View view){Toast.makeText(this,"注解模式被点击了",Toast.LENGTH_SHORT).show();}

多个按钮的监听:

    @Event(value = {R.id.btn_annotation,R.id.btn_net,R.id.btn_image,R.id.btn_image_list})private void getEvent(View view){switch (view.getId()){case R.id.btn_annotation:Toast.makeText(this,"注解模式被点击了",Toast.LENGTH_SHORT).show();break;case R.id.btn_net:Toast.makeText(this,"网络模块被点击了",Toast.LENGTH_SHORT).show();break;case R.id.btn_image:Toast.makeText(this,"加载单张图片被点击了",Toast.LENGTH_SHORT).show();break;case R.id.btn_image_list:Toast.makeText(this,"加载列表图片被点击了",Toast.LENGTH_SHORT).show();}}

2、在Fragment中使用注解初始化布局:

步骤:

1.在 Application 的 onCreate方法中加入下面代码:  x.Ext.init(this);  

2.在 Fragment 的onCreateView方法中加入下面代码: x.view().inject(this,inflater,container);

    @Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {return  x.view().inject(this,inflater,container);}

3.加载当前的 Fragment 布局需要如下注解:  @ContentView 加入到 Fragment 的上方

@ContentView(R.layout.activity_demo_fragment)

4.给 View 进行初始化需要如下注解:  @InjectView  

5.处理控件的各种响应事件需要如下注解:  @Enven

例子:替换fragment:

即将被替换掉的fragment:

@ContentView(R.layout.activity_fragment_xutils)
public class FragmentXutilsActivity extends FragmentActivity {@ViewInject(R.id.text)private TextView text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_fragment_xutils);x.view().inject(this);text.setText("在fragment中使用注解");//1.得到FragmentManageFragmentManager fm = getSupportFragmentManager();//2.开启事务FragmentTransaction tf = fm.beginTransaction();//3.替换fragmenttf.replace(R.id.fragment,new DemoFragment());//4.提交tf.commit();}
}

布局:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.atguigu.android.atguigu.xutils3.FragmentXutilsActivity"android:orientation="vertical"><TextViewandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content" /><FrameLayoutandroid:id="@+id/fragment"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout></LinearLayout>

即将要显示的fragment :

@ContentView(R.layout.activity_demo_fragment)
public class DemoFragment extends Fragment {@ViewInject(R.id.button)private Button button;@ViewInject(R.id.text)private TextView text;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {return  x.view().inject(this,inflater,container);}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);text.setText("我在fragment中被初始化了....");button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}});}
}

布局:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.atguigu.android.atguigu.xutils3.DemoFragment"><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content" /><TextViewandroid:text="text"android:id="@+id/text"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

 四、联网模块

1、GET请求

                //get请求RequestParams params = new RequestParams("http://api.m.mtime.cn/PageSubArea/TrailerList.api");x.http().get(params, new Callback.CommonCallback<String>() {@Overridepublic void onSuccess(String result) {tv_result.setText(result);}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {tv_result.setText(ex.getMessage());}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}});

2、POST请求

                //post请求RequestParams params = new RequestParams("http://api.m.mtime.cn/PageSubArea/TrailerList.api");x.http().post(params, new Callback.CommonCallback<String>() {@Overridepublic void onSuccess(String result) {tv_result.setText(result);}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {tv_result.setText(ex.getMessage());}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}});

3、大文件下载

                RequestParams params1 = new RequestParams("http://vfx.mtime.cn/Video/2019/04/12/mp4/190412103210900661.mp4");//设置保存路径params1.setSaveFilePath(Environment.getExternalStorageDirectory()+"/661.mp4");//设置是否可以立即取消下载params1.setCancelFast(true);//设置是否自动根据头信息命名params1.setAutoRename(false);x.http().get(params1, new Callback.ProgressCallback<File>() {/*** 当下载成功的时候回调这个方法,并且把下载到哪个路径回传过来* @param result*/@Overridepublic void onSuccess(File result) {Toast.makeText(XutilsNetActivity.this,"success"+result,Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {Toast.makeText(XutilsNetActivity.this,"success"+ex.getMessage(),Toast.LENGTH_SHORT).show();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}@Overridepublic void onWaiting() {}@Overridepublic void onStarted() {}/*** 设置进度条* @param total* @param current* @param isDownloading*/@Overridepublic void onLoading(long total, long current, boolean isDownloading) {progressbar.setMax((int) total);progressbar.setProgress((int) current);}});

自定义线程下载,下载速度更快:

// 自定义线程池 , 有效 的值范围 [1, 3], 设置为 3 时 , 可能阻塞图片加载 .
params1.setExecutor(new PriorityExecutor(3, true));

设置断点续传:在下载的时候突然手机没电或者其他情况,再次下载的时候会继续下载,不会重新开始下载。

                //设置断点续传params1.setAutoResume(true);

4、大文件上传

                RequestParams params2 = new RequestParams("http://192.168.35.11:8080/FileUpload/FileUploadServlet");//以表单方式上传params2.setMultipart(true);//设置上传文件的路径params2.addBodyParameter("File",new File(Environment.getExternalStorageDirectory()+"/661.mp4"),null,"oppo.mp4");x.http().post(params2, new Callback.ProgressCallback<File>() {/*** 当下载成功的时候回调这个方法,并且把下载到哪个路径回传过来* @param result*/@Overridepublic void onSuccess(File result) {Toast.makeText(XutilsNetActivity.this,"success="+result,Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {Toast.makeText(XutilsNetActivity.this,ex.getMessage(),Toast.LENGTH_SHORT).show();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}@Overridepublic void onWaiting() {}@Overridepublic void onStarted() {}/*** 设置进度条* @param total* @param current* @param isDownloading*/@Overridepublic void onLoading(long total, long current, boolean isDownloading) {progressbar.setMax((int) total);progressbar.setProgress((int) current);}});

Android xUtils3相关推荐

  1. android requestparams传入对象,Android xutils3上传文件使用示例

    Android xutils3工具上传文件非常方便,只需要传入File文件数据或一些其它参数给RequestParams对象即可完成,现在我们来开始使用xutils工具上传文件吧! 步骤一:需要在项目 ...

  2. Android xUtils3源码解析之图片模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  3. Android xUtils3源码解析之注解模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  4. Android xUtils3源码解析之数据库模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  5. android xutil 数据库,Android XUtils3框架的基本使用方法(二)

    上一篇Android中XUtils3框架使用方法详解(一)文章,主要介绍了XUtil3的注解模块,网络模块,图片加载模块,今天给大家带来数据库模块的讲解,现在主流的ORM框架很多,比如OrmLite, ...

  6. android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载

    上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能. 先将xutils依赖搭建好(上一篇博客已经具体写了方法) 先看看效果图: 下面开始代码的 ...

  7. Android xUtils3使用

    一.xUtils简介: xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,官网:https://github.com/wyouflf/xUtils3 xUtils 包含 ...

  8. android xutils json请求,Android Xutils3网络请求的封装详解及实例代码

    Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org. ...

  9. android xutils3 jar,基于Xutils3的android开发

    [android]代码库(1)Dao类 package org.gdufs.dao; import java.sql.*; import java.util.ArrayList; import jav ...

最新文章

  1. java可以用 lt =判断int吗_int 和 integer:装箱和拆箱的过程,会用到什么方法
  2. 利用树求解算术表达式的值
  3. XML与Web数据挖掘
  4. keil 查看 stm32 io波形_如何系统地入门学习stm32?
  5. 管理员所有权代码_为什么代码所有权糟透了,您永远不应该在有实践的地方工作...
  6. vim显示行号、多行复制和删除
  7. (原)PyTorch中使用指定的GPU
  8. Java 11 正式发布,新特性解读
  9. Matplotlib Toolkits:三维绘图工具包matplotlib.mplot3d
  10. 字节跳动又启动期权回购了,这次价格142美元,较上一轮回购价涨8%
  11. Process Explorer 诊断和排错实例(下)
  12. [转]中国著名黑客你知道多少?
  13. windows10按键映射PowerToys
  14. 解决局域网共享无法访问
  15. RFID射频识别技术在血液溯源管理中的应用
  16. xp计算机启动检测硬盘,取消WinXP开机自检技巧五则
  17. 教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)
  18. 时尚漂亮的充电头,苹果安卓都能用,Anker安芯充20W上手
  19. 用计算机找终身伴侣,五个经典问题决定你是否找到终身伴侣
  20. A Bootiful Podcast: Building China-scale Infrastructure at Alibaba with Spring Cloud, Rsocket, and m

热门文章

  1. 深富策略:大盘连续上行 周期股领涨
  2. PCA主成分分析的原理解释及python代码实现
  3. matlab 判断语句是否为真,matlab 条件判断语句不生效
  4. 【英语】40句英文句子,学会了会让你的阅读事半功倍
  5. IDEA 复原不小心被误删除的本地代码
  6. java计算机毕业设计家政服务管理系统源码+mysql数据库+系统+lw文档+部署
  7. android studio 的gradle配置
  8. android 项目build.gradle,Android build.gradle 配置详解
  9. Linux下执行C程序
  10. ichunqiu的Round Rabins!的writeup