xutils3.0 使用 注意事項

0.0

https://github.com/wyouflf/xUtils3

以as爲例,三步即可使用:

一.gradle構建時添加依賴

compile 'org.xutils:xutils:3.3.40'

二.清單文件中添加權限 

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

三.初始化

// 在application的onCreate中初始化
@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // 是否輸出debug日誌, 開啓debug會影響性能.
    ...
}

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

-----使用:

1.事件註解 (OnClick,OnLongClick,OnTouchListenre等)

/**
 * 1. 方法必須私有限定,
 * 2. 方法參數形式和方法返回值必須和type對應的Listener接口一致.
 * 3. 註解參數value支持數組: value={id1, id2, id3}
 * 4. 其它參數說明見{@link org.xutils.event.annotation.Event}類的說明.
 **/ 
//這是OnClick 
@Event(value = R.id.btn_test_baidu1,type = View.OnClickListener.class)
private void onTestBaidu1Click(View view) {
...
}
 
//這是OnTouchListener
@Event(value = R.id.btn_test_baidu2,type = View.OnTouchListener.class)
private boolean onTestBaidu1Touch(View view,MotionEvent event) {
...
}
//這是Adapter中的item單擊事件(ListView和它的Adapter)
@Event(value = R.id.listview, type = AdapterView.OnItemClickListener.class) 
private void onImageItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(this.getActivity(), BigImageActivity.class);
        intent.putExtra("url", imageListAdapter.getItem(position).toString());
        this.getActivity().startActivity(intent);
 }

2.View註解

2.1------Activity.採用自定義BaseActivity方式

在自定義的BaseActivity中加入

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        x.view().inject(this);//註解view
    }

Activity中使用:

@ContentView(R.layout.activity_big_image)//這裏註解佈局
public class BigImageActivity extends BaseActivity { 
    @ViewInject(R.id.iv_big_img) private ImageView iv_big_img; //註解view 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        ImageOptions imageOptions = new ImageOptions.Builder()
                // 加載中或錯誤圖片的ScaleType
                //.setPlaceholderScaleType(ImageView.ScaleType.MATRIX)
                // 默認自動適應大小
                // .setSize(...)
                .setIgnoreGif(false)
                // 如果使用本地文件url, 添加這個設置可以在本地文件更新後刷新立即生效.
                //.setUseMemCache(false)
                .setImageScaleType(ImageView.ScaleType.CENTER).build(); 
        x.image().bind(iv_big_img, getIntent().getStringExtra("url"), imageOptions);//加載圖片(帶自定義options)
       x.image().bind(iv_big_img, getIntent().getStringExtra("url"));//加載圖片(不帶自定義options)
 }

2.2-------fragment中同樣採用BaseFragment形式

在自定義的BaseFragment中加入

public class BaseFragment extends Fragment { 
    private boolean injected = false; 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        injected = true;
        return x.view().inject(this, inflater, container);//註解view
    } 
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (!injected) {//防止重複註解
            x.view().inject(this, this.getView());
        }
    }
}

fragment中使用(同Activity):

@ContentView(R.layout.fragment_image)                  //註解佈局
public class ImageFragment extends BaseFragment { 
    ImageOptions imageOptions; 
    @ViewInject(R.id.img) private ImageView imageview; //註解view

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        imageOptions = new ImageOptions.Builder()
                .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))
                .setRadius(DensityUtil.dip2px(5))
                // 如果ImageView的大小不是定義爲wrap_content, 不要crop.
                .setCrop(true) // 很多時候設置了合適的scaleType也不需要它.
                // 加載中或錯誤圖片的ScaleType
                //.setPlaceholderScaleType(ImageView.ScaleType.MATRIX)
                .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                .setLoadingDrawableId(R.mipmap.ic_launcher)
                .setFailureDrawableId(R.mipmap.ic_launcher)
                .build(); 
      x.image().bind(imgview, "/sdcard/test.jpg", imageOptions);///加載圖片
    }
     
}

3.db註解(orm),這裏是簡單的使用 一對多,多對一等參考sample項目

3.1寫db的bean

@Table(name = "Student") //這是表名
public class Student { 
 @Column(name = "id", isId = true)  private int id ;      //字段名(isId設置唯一鍵值)
 @Column(name = "name")             private String name;  //字段名   

public int getId() {  return id; } 
public void setId(int id) { this.id = id; }
public String getName() { return name; } 
public void setName(String  name) { this.name = name; } 
 
}

3.2 設置DaoConfig數據庫路徑參數,更新字段等(可以只配置一次,一般在application中配置一次)

  DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
            .setDbName("test.db")
            // 不設置dbDir時, 默認存儲在app的私有目錄.
            .setDbDir(new File("/sdcard")) // "sdcard"的寫法並非最佳實踐, 這裏爲了簡單, 先這樣寫了.
            .setDbVersion(2)
            .setDbOpenListener(new DbManager.DbOpenListener() {
                @Override
                public void onDbOpened(DbManager db) {
                    // 開啓WAL, 對寫入加速提升巨大
                    db.getDatabase().enableWriteAheadLogging();
                }
            })
            .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                @Override
                public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                    // TODO: ...
                    // db.addColumn(...);
                    // db.dropTable(...);
                    // ...
                    // or
                    // db.dropDb();
                }
            });

3.3 使用:

先拿到db.

DbManager db = x.getDb(daoConfig);

//增

Student s = new Student();

           s.setId(10);

           s.setName("xiaom"); 

        db.saveOrUpdate(s);//一種更新,如果數據庫中沒有,會創建並保存 

        db.save(s);             //直接保存,如存在會保存失敗

//刪

1.直接刪除

Student s = new Student();

           s.setId(10);

           s.setName("xiaom"); 

db.delete(s);

2.查詢到之後再進行刪除

 Student s =db.selector(Student.class).where("id","=",10).findFirst(); 

db.delete(s);

3.//直接根據id刪除

db.deleteById(Student.class,1);

4.根據where語句刪除

db.delete(Student.class,WhereBuilder?)

//改

 

//查

//查詢所有name中包含w,並且id>32  的個數
long count = db.selector(Student.class).where("name", "LIKE", "w%").and("id", ">", 32).count();

 

//查詢,簡單的查詢第一個
 Student s = db.selector(Student.class).findFirst();
//查詢,id在1到3之間,和3到6之間的第一個
 Student s = db.selector(Student.class).where("id", "in", new int[]{1, 3, 6}).findFirst();
//查詢多個,20<id<54的所有的  並根據id排序
List<Student> list = db.selector(Student.class)
                    .where("id", "<", 54)
                    .and("id", ">", 20)
                    .orderBy("id")
                    .limit(10).findAll();

 

網絡:

添加重定向  

   自定義class,實現RedirectHandler接口,並實例化

myRedirectHandler  redirectHandler =new myRedirectHandler();
後添加到params中:
params.setRedirectHandler(redirectHandler);


 

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