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);