xUtils3 其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是苦于没有完整的使用手册,下面是使用中的一些总结,不断完善。
xUtils 版本 | 3.3.36 |
jar包下载地址 | |
GitHub项目地址 |
使用前配置
12
导入文件
方法1:导入jar包文件;
方法2:在gradle中添加依赖:
dependencies { compile 'org.xutils:xutils:3.3.44'}
1. xUtils中的IOC框架
使用xUtils的第一步就是先创建自己的Application类,在MyApplication中初始化xUtils,代码如下:
1 public class MyApplication extends Application {2 @Override 3 public void onCreate() { 4 super.onCreate(); 5 x.Ext.init(this); //xUtils初始化 6 } 7 }
在AndroidManifest.xml的application标签中添加如下代码:
1 android:name=".MyApplication"
这样初始化就算完成了。
例:下面使用IOC框架的代码如下:
1 import org.xutils.view.annotation.ContentView; 2 import org.xutils.view.annotation.Event; 3 import org.xutils.view.annotation.ViewInject; 4 import org.xutils.x; 5 // 获取Activity布局 6 @ContentView(R.layout.activity_main) 7 public class MainActivity extends Activity { 8 // 获取控件ID 9 @ViewInject(R.id.mybut) 10 private Button mybut; 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 x.view().inject(this); // 初始化x.view(), 否则ID获取失败 16 } 17 18 /** 添加控件监听事件 */ 19 @Event(value = {R.id.mybut, R.id.myradio},type = View.OnClickListener.class) 20 private void onButtonClick(View v){ 21 switch (v.getId()) { 22 case R.id.mybut: 23 Toast.makeText(this,"我是xUtils的IOC功能", Toast.LENGTH_SHORT).show(); 24 break; 25 case R.id.myradio: 26 break; 27 } 28 } 29 }
注释:监听事件中,@Event, value后面是 Array,当多个ID时{
R.id.btn1, R.id.btn2, R.id.btn3, ···}; 当只有一个ID时可直接写 value=R.id.btn。当有多个ID时,要保证后面事件的类型(type)要是一致的,否则要在不同的方法中实现。
另:点击事件方法名一定要包含onClick或者onEven。
2. 网络请求
RequestParams 参数:
RequestParams params = new RequestParams(url);
.addQueryStringParamter("wd", "xUtils"
); // 适用于GET请求方式;类似于字符串拼接 http://xxx/x?wd=xUtils。
.addBodyParameter("wd", "xUtils"
); // 适用于POST请求方式;添加到Body体的参数。
2.1 GET/POST请求
get和post请求并无太大区别,主要区别在于参数的添加方法上。
GET请求 | POST请求 | |
请求参数添加: | .addQueryStringParamter("wd", "xUtils" ); | .addBodyParameter("wd", "xUtils" ); |
请求的方法(带缓冲): | x.http().get(params, new Callback.CommonCallback<String>() { }); | x.http().post(params, new Callback.CommonCallback<String>() { }); |
请求的方法(带缓冲): | x.http().get(params, new Callback.CacheCallback<String>() { }); | x.http().post(params, new Callback.CacheCallback<String>() { }); |
2.1.1 无缓存请求(以post为例)
1 RequestParams params = new RequestParams("http://xxx.com/xx"); 2 x.http().post(params, new Callback.CommonCallback() { 3 @Override 4 public void onSuccess(String result) { 5 // 请求成功后,返回结果 6 } 7 @Override 8 public void onError(Throwable ex, boolean isOnCallback) { 9 // 请求失败后返回结果10 if (!isNetworkConnections() || ex instanceof HttpException) {11 // 网络错误12 } else {13 // 其他请求错误14 }15 @Override 16 public void onCancelled(Callback.CancelledException cex) {17 // 中断请求18 }19 @Override 20 public void onFinished() {21 // 请求结束(必调用)22 } 23 }24 );25 /**26 * @return 网络是否连接 true:有网络,false:无网络27 */28 private boolean isNetworkConnections() {29 ConnectivityManager con = (ConnectivityManager) x.app().getSystemService(Context.CONNECTIVITY_SERVICE);30 boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();31 boolean internet = con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();32 return (wifi || internet);33 }
2.1.2 有缓存请求(以POST为例)
1 RequestParams params = new RequestParams("http://xxx.com/xx"); 2 x.http().post(params, new Callback.CacheCallback() { 3 @Override 4 public void onSuccess(String result) { 5 // 请求成功后,返回结果 6 } 7 @Override 8 public boolean onCache(String result) { 9 // 此方法为本地加载回调方法,本地没有数据则不会调用此方法10 // @param result 缓存中得到的数据11 // @return true 如果缓存中有数据就不再进行网络请求12 // false 得到缓存数据后仍进行网络请求13 return ture;14 }15 @Override 16 public void onError(Throwable ex, boolean isOnCallback) {17 // 请求失败后返回结果18 if (!isNetworkConnections() || ex instanceof HttpException) {19 // 网络错误20 } else {21 // 其他请求错误22 }23 @Override 24 public void onCancelled(Callback.CancelledException cex) {25 // 中断请求26 }27 @Override 28 public void onFinished() {29 // 请求结束(必调用)30 } 31 }32 );
3. 图片加载
3.1 普通图片加载
最简单的加载方式:
x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg");
当然我们也可以设置一些属性:
1 ImageOptions imageOptions = new ImageOptions.Builder()2 .setSize(120, 120)3 .setRadius(DensityUtil.dip2px(5))4 .setCrop(true)5 .setImageScaleType(ImageView.ScaleType.CENTER_CROP)6 .setLoadingDrawableId(R.mipmap.ic_launcher)7 .setFailureDrawableId(R.mipmap.ic_launcher)8 .build(); 9 x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg",imageOptions);
3.2 圆形图片加载
ImageOptions options = new ImageOptions.Builder() .setLoadingDrawableId(R.mipmap.ic_launcher) .setFailureDrawableId(R.mipmap.ic_launcher) .setUseMemCache(true) .setCircular(true) // 设置成圆形图片 .setFadeIn(true) //淡入效果 .setImageScaleType(ImageView.ScaleType.FIT_CENTER) .build();
注:圆形图片加载options的设置对本地图片无效。
3.3 GIF图片加载
ImageOptions options = new ImageOptions.Builder() .setLoadingDrawableId(R.mipmap.ic_launcher) .setFailureDrawableId(R.mipmap.ic_launcher) .setUseMemCache(true) .setIgnoreGif(true) // 允许加载GIF图片 .setFadeIn(true) //淡入效果 .setImageScaleType(ImageView.ScaleType.FIT_CENTER) .build();
3.4 ImageOptions属性
.setFadeIn(true); //淡入效果
.setCircular(true); //设置图片显示为圆形
.setSquare(true); //设置图片显示为正方形
.setCrop(true).setSize(200,200); //设置大小
.setAnimation(animation); //设置动画
.setFailureDrawable(Drawable failureDrawable); //设置加载失败的动画
.setFailureDrawableId(int failureDrawable); //以资源id设置加载失败的动画
.setLoadingDrawable(Drawable loadingDrawable); //设置加载中的动画
.setLoadingDrawableId(int loadingDrawable); //以资源id设置加载中的动画
.setIgnoreGif(false); //忽略Gif图片
.setParamsBuilder(ParamsBuilder paramsBuilder); //在网络请求中添加一些参数
.setRaduis(int raduis); //设置拐角弧度
.setUseMemCache(true); //设置使用MemCache,默认true
4. 相关资料
☞