android 高級之旅 (二 )xUtils3 基本用法

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();
    }
}
到此。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章