xutils3.0 使用 注意事项


0.0

https://github.com/wyouflf/xUtils3

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

一.gradle构建时添加依赖

compile 'org.xutils:xutils:3.3.40'

二.清单文件中添加权限 


三.初始化

// 在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
List 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);