xutils功能主要有4部分:註解、網絡加載、圖片加載、數據庫;其他的還有log輸出、MD5加密等小功能
總之,xutils3是一款功能強大的框架,更多特性以及簡介 移步:點擊這裏
一、xUtils可以直接從androidstudio中導入依賴,導入成功後需添加權限如下:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
二、xutils需要在application中的oncreate方法中初始化,
在activity中:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(true);
}
}
在fragment中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
injected = true;
View view = x.view().inject(this, inflater, container);
return view;
}
四大功能:
一、註解 ViewUtils模塊:
與很多註解框架用法大同小異(如greendao)
@ViewInject(R.id.image1)
private ImageView image1;
@Event(value = R.id.t1)
private void onBtn1ClickListener(View view) { ... }
需要注意的是,在給控件添加點擊事件等監聽時,監聽方法的修飾符必須爲私有(private)
支持同時綁定多個控件id,以數組方式寫入註解:
@Event(value = {R.id.t1,R.id.t2,R.id.t3})
private void onBtn1ClickListener(View view) { ... }
//在Fragment中注入: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加載fragment佈局 ViewUtils.inject(this, view); //注入view和事件 ... } //在PreferenceFragment中注入: public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件 ... }
二、加載圖片 BitmapUtils模塊
圖片加載使用非常簡單,只有幾個非常容易理解的API,可以很輕鬆的實現對 圖片的載入動畫、 圖片的縮放、旋轉、圓角、圓形等處理,
@Event(value = R.id.t1)
private void onBtn1ClickListener(View view) {
//自定義的縮放動畫
ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF, 0.3f);
scaleAnimation.setDuration(3000);
ImageOptions imageOptions = new ImageOptions.Builder()
.setCircular(true) //是否爲圓形
.setAnimation(scaleAnimation) //動畫
.setSize(1000, 1500)// 設置尺寸
.setRadius(50) //設置圓角
.setAutoRotate(true) //自動旋轉
.build();
x.image().bind(image1, imageUrl,imageOptions, new Callback.CacheCallback<Drawable>() {
@Override
public boolean onCache(Drawable result) {
return false;
}
@Override
public void onSuccess(Drawable result) {
image1.setImageDrawable(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
三、數據庫 DbUtils模塊
DbUtils db = DbUtils.create(this);
User user = new User(); //這裏需要注意的是User對象必須有id屬性,或者有通過@ID註解的屬性
user.setEmail("[email protected]");
user.setName("wyouflf");
db.save(user); // 使用saveBindingId保存實體時會爲實體的id賦值
...
// 查找
Parent entity = db.findById(Parent.class, parent.getId());
List<Parent> list = db.findAll(Parent.class);//通過類型查找
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));
// IS NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
// IS NOT NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));
// WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset
List<Parent> list = db.findAll(Selector.from(Parent.class)
.where("id" ,"<", 54)
.and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))
.orderBy("id")
.limit(pageSize)
.offset(pageSize * pageIndex));
// op爲"in"時,最後一個參數必須是數組或Iterable的實現類(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
// op爲"between"時,最後一個參數必須是數組或Iterable的實現類(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));
DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列
List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));
...
List<DbModel> dbModels = db.findDbModelAll(sql); // 自定義sql查詢
db.execNonQuery(sql) // 執行自定義sql
...
四、網絡請求HttpUtils模塊
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.btn_get)
private Button btnGet;
@ViewInject(R.id.tv_test)
private TextView tvTest;
private static final String jsonPath = "http://ikft.house.qq.com/index.php?guid=866500021200250&devua=appkft_1080_1920_XiaomiMI4LTE_1.8.3_Android19&devid=866500021200250&appname=QQHouse&mod=appkft&reqnum=&pageflag=&act=newslist&channel=71&buttonmore=&cityid=1";
public final static String pathPost = "http://mrobot.pcauto.com.cn/v2/cms/channels/1?";
private Callback.Cancelable cancelable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
}
//網路請求 ----get
@Event(value = R.id.btn_get,type = View.OnClickListener.class)
private void onHttpGet(View view){
// org.xutils.http.RequestParams entity, 請求參數
// org.xutils.common.Callback.CommonCallback<T> callback 請求的回調
RequestParams requestParams = new RequestParams(jsonPath);
requestParams.setCacheDirName("httpCache"); //設置緩存路徑名;
requestParams.setCacheMaxAge(1000*60*30);//設置緩存最大存活時間
requestParams.setCacheSize(1024*1024*5);//設置緩存的大小
requestParams.setConnectTimeout(3*1000);//設置連接超時
requestParams.setMaxRetryCount(3);//設置重複連接的次數\
requestParams.setPriority(Priority.BG_TOP);//設置網絡優先級
requestParams.setCharset("UTF-8");//設置字符編碼\
cancelable = x.http().get(requestParams, new Callback.CommonCallback<String>() {
/*
*數據請求成功的回調
* */
@Override
public void onSuccess(String result) {
//在主線程運行
if (!TextUtils.isEmpty(result)) {
tvTest.setText(result);
}
}
/*
*數據請求錯誤的回調
* */
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
/*
*數據請求取消的回調
* */
@Override
public void onCancelled(CancelledException cex) {
}
/*
*數據請求完成
* */
@Override
public void onFinished() {
}
});
/* cancelable = x.http().get(requestParams, new Callback.CacheCallback<String>() {
@Override
public boolean onCache(String result) {
return false;
}
@Override
public void onSuccess(String result) {
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
*/
}
/*
*post請求
* */
@Event(value = R.id.btn_post,type = View.OnClickListener.class)
private void onHttpPost(View view){
//post測試
//post提交的字段:pageNo=1&pageSize=20&serialIds=2143,3404&v=4.0.0
// public final static String pathPost = "http://mrobot.pcauto.com.cn/v2/cms/channels/1?";
RequestParams requestParams = new RequestParams(pathPost);
//添加post請求參數
requestParams.addBodyParameter("pageNo","1");
requestParams.addBodyParameter("pageSize","20");
requestParams.addBodyParameter("serialIds","2143,3404");
requestParams.addBodyParameter("v","4.0.0");
x.http().post(requestParams, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
tvTest.setText(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
@Override
protected void onDestroy() {
//取消請求
cancelable.cancel();
super.onDestroy();
}
}
到此。