xUtils3 其功能不得不說,簡化了很多的開發步驟,可以說是非常好的開發工具,但是苦於沒有完整的使用手冊,下面是使用中的一些總結,不斷完善。
xUtils 版本 | 3.3.36 |
jar包下載地址 | |
GitHub項目地址 |
使用前配置
1 <uses-permission android:name="android.permission.INTERNET" /> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
導入文件
方法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<String>() { 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<String>() { 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. 相關資料
☞ Android xUtils3.0使用手冊(二) - 數據庫操作