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();
//查询多个,20List 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);