




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、最近搜了一些框架供初學(xué)者學(xué)習(xí),比較了一下XUtils是目前git上比較活躍 功能比較完善的一個(gè)框架,是基于afinal開發(fā)的,比afinal穩(wěn)定性提高了不少,下面是介紹:鑒于大家的熱情,我又寫了一篇Android 最火框架XUtils之注解機(jī)制詳解<-點(diǎn)擊查看xUtils簡介xUtils 包含了很多實(shí)用的android工具。xUtils 最初源于Afinal框架,進(jìn)行了大量重構(gòu),使得xUtils支持大文件上傳,更全面的http請(qǐng)求協(xié)議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響.xUitls最低兼容android 2.2 (api level 8)目前xUt
2、ils主要有四大模塊:DbUtils模塊:android中的orm框架,一行代碼就可以進(jìn)行增刪改查;支持事務(wù),默認(rèn)關(guān)閉;可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時(shí)候請(qǐng)注解表名和列名);支持綁定外鍵,保存實(shí)體時(shí)外鍵關(guān)聯(lián)實(shí)體自動(dòng)保存或更新;自動(dòng)加載外鍵關(guān)聯(lián)實(shí)體,支持延時(shí)加載;支持鏈?zhǔn)奖磉_(dá)查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。ViewUtils模塊:android中的ioc框架,完全注解方式就可以進(jìn)行UI,資源和事件綁定;新的事件綁定方式,使用混淆工具混淆后仍可正常工作;目前支持常用的20種事件綁定,參見ViewComm
3、onEventListener類和包c(diǎn)om.lidroid.xutils.view.annotation.event。HttpUtils模塊:支持同步,異步方式的請(qǐng)求;支持大文件上傳,上傳大文件不會(huì)oom;支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請(qǐng)求;下載支持301/302重定向,支持設(shè)置是否根據(jù)Content-Disposition重命名下載的文件;返回文本內(nèi)容的請(qǐng)求(默認(rèn)只啟用了GET請(qǐng)求)支持緩存,可設(shè)置默認(rèn)過期時(shí)間和針對(duì)當(dāng)前請(qǐng)求的過期時(shí)間。BitmapUtils模塊:加載bitmap的時(shí)候無需考慮bitmap加
4、載過程中出現(xiàn)的oom和android容器快速滑動(dòng)時(shí)候出現(xiàn)的圖片錯(cuò)位等現(xiàn)象;支持加載網(wǎng)絡(luò)圖片和本地圖片;內(nèi)存管理使用lru算法,更好的管理bitmap內(nèi)存;可配置線程加載線程數(shù)量,緩存大小,緩存路徑,加載顯示動(dòng)畫等.使用xUtils快速開發(fā)框架需要有以下權(quán)限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
5、 混淆時(shí)注意事項(xiàng):添加Android默認(rèn)混淆配置$sdk.dir/tools/proguard/proguard-android.txt不要混淆xUtils中的注解類型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation *; 對(duì)使用DbUtils模塊持久化的實(shí)體類不要混淆,或者注解所有表和列名稱Table(name="xxx"),Id(column="xxx"),Column(column="xxx"),Foreign(column="xxx"
6、,foreign="xxx");DbUtils使用方法:DbUtils db = DbUtils.create(this);User user = new User(); /這里需要注意的是User對(duì)象必須有id屬性,或者有通過ID注解的屬性u(píng)ser.setEmail("wyouflf");user.setName("wyouflf");db.save(user); / 使用saveBindingId保存實(shí)體時(shí)會(huì)為實(shí)體的id賦值./ 查找Parent entity = db.findById(Parent.class, parent.
7、getId();List<Parent> list = db.findAll(Parent.class);/通過類型查找Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test");/ IS NULLParent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null);/ IS NOT NUL
8、LParent 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 pageOffsetList<Parent> list = db.findAll(Selector.from(Parent.class) .where("id" ,"<", 5
9、4) .and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30) .orderBy("id") .limit(pageSize) .offset(pageSize * pageIndex);/ op為"in"時(shí),最后一個(gè)參數(shù)必須是數(shù)組或Iterable的實(shí)現(xiàn)類(例如List等)Parent test = db.findFirst(Selector.from(Parent.class).where("i
10、d", "in", new int1, 2, 3);/ op為"between"時(shí),最后一個(gè)參數(shù)必須是數(shù)組或Iterable的實(shí)現(xiàn)類(例如List等)Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String"1", "5");DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class
11、).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)
12、/ 執(zhí)行自定義sql.ViewUtils使用方法完全注解方式就可以進(jìn)行UI綁定和事件綁定。無需findViewById和setClickListener等。/ xUtils的view注解要求必須提供id,以使代碼混淆不受影響。ViewInject(R.id.textView)TextView textView;/ViewInject(vale=R.id.textView, parentId=R.id.parentView)/TextView textView;ResInject(id = R.string.label, type = ResType.String)private String
13、label;/ 取消了之前使用方法名綁定事件的方式,使用id綁定不受混淆影響/ 支持綁定多個(gè)id OnClick(R.id.id1, R.id.id2, R.id.id3)/ or OnClick(value=R.id.id1, R.id.id2, R.id.id3, parentId=R.id.pid1, R.id.pid2, R.id.pid3)/ 更多事件支持參見ViewCommonEventListener類和包c(diǎn)om.lidroid.xutils.view.annotation.event。OnClick(R.id.test_button)public void testButton
14、Click(View v) / 方法簽名必須和接口中的要求一致 ./在Activity中注入:Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); ViewUtils.inject(this); /注入view和事件 . textView.setText("some text."); ./在Fragment中注入:Overridepublic View onCreateView(Lay
15、outInflater 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.onActivityCr
16、eated(savedInstanceState); ViewUtils.inject(this, getPreferenceScreen(); /注入view和事件 ./ 其他重載/ inject(View view);/ inject(Activity activity)/ inject(PreferenceActivity preferenceActivity)/ inject(Object handler, View view)/ inject(Object handler, Activity activity)/ inject(Object handler, PreferenceGr
17、oup preferenceGroup)/ inject(Object handler, PreferenceActivity preferenceActivity)HttpUtils使用方法:普通get方法HttpUtils http = new HttpUtils();http.send(HttpRequest.HttpMethod.GET, "", new RequestCallBack<String>() Override public void onLoading(long total, long current, boolean isUploadin
18、g) testTextView.setText(current + "/" + total); Override public void onSuccess(ResponseInfo<String> responseInfo) textView.setText(responseInfo.result); Override public void onStart() Override public void onFailure(HttpException error, String msg) );使用HttpUtils上傳文件 或者 提交數(shù)據(jù) 到服務(wù)器(post方
19、法)RequestParams params = new RequestParams();params.addHeader("name", "value");params.addQueryStringParameter("name", "value");/ 只包含字符串參數(shù)時(shí)默認(rèn)使用BodyParamsEntity,/ 類似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。params.addBodyParameter(&quo
20、t;name", "value");/ 加入文件參數(shù)后默認(rèn)使用MultipartEntity("multipart/form-data"),/ 如需"multipart/related",xUtils中提供的MultipartEntity支持設(shè)置subType為"related"。/ 使用params.setBodyEntity(httpEntity)可設(shè)置更多類型的HttpEntity(如:/ MultipartEntity,BodyParamsEntity,FileUploadEntity,Input
21、StreamUploadEntity,StringEntity)。/ 例如發(fā)送json參數(shù):params.setBodyEntity(new StringEntity(jsonStr,charset);params.addBodyParameter("file", new File("path");.HttpUtils http = new HttpUtils();http.send(HttpRequest.HttpMethod.POST, "uploadUrl.", params, new RequestCallBack<St
22、ring>() Override public void onStart() testTextView.setText("conn."); Override public void onLoading(long total, long current, boolean isUploading) if (isUploading) testTextView.setText("upload: " + current + "/" + total); else testTextView.setText("reply: "
23、; + current + "/" + total); Override public void onSuccess(ResponseInfo<String> responseInfo) testTextView.setText("reply: " + responseInfo.result); Override public void onFailure(HttpException error, String msg) testTextView.setText(error.getExceptionCode() + ":"
24、 + msg); );使用HttpUtils下載文件:支持?jǐn)帱c(diǎn)續(xù)傳,隨時(shí)停止下載任務(wù),開始任務(wù)HttpUtils http = new HttpUtils();HttpHandler handler = http.download(" "/sdcard/httpcomponents-client-4.2.5-src.zip", true, / 如果目標(biāo)文件存在,接著未完成的部分繼續(xù)下載。服務(wù)器不支持RANGE時(shí)將從新下載。 true, / 如果從請(qǐng)求返回信息中獲取到文件名,下載完成后自動(dòng)重命名。 new RequestCallBack<File>()
25、Override public void onStart() testTextView.setText("conn."); Override public void onLoading(long total, long current, boolean isUploading) testTextView.setText(current + "/" + total); Override public void onSuccess(ResponseInfo<File> responseInfo) testTextView.setText(&quo
26、t;downloaded:" + responseInfo.result.getPath(); Override public void onFailure(HttpException error, String msg) testTextView.setText(msg); );./調(diào)用cancel()方法停止下載handler.cancel();BitmapUtils 使用方法BitmapUtils bitmapUtils = new BitmapUtils(this);/ 加載網(wǎng)絡(luò)圖片bitmapUtils.display(testImageView, "/ 加載本地
27、圖片(路徑以/開頭, 絕對(duì)路徑)bitmapUtils.display(testImageView, "/sdcard/test.jpg");/ 加載assets中的圖片(路徑以assets開頭)bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");/ 使用ListView等容器展示圖片時(shí)可通過PauseOnScrollListener控制滑動(dòng)和快速滑動(dòng)過程中時(shí)候暫停加載圖片listView.setOnScrollListener(new PauseOnScrollListener(
28、bitmapUtils, false, true);listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener);輸出日志 LogUtils/ 自動(dòng)添加TAG,格式: className.methodName(L:lineNumber)/ 可設(shè)置全局的LogUtils.allowD = false,LogUtils.allowI = false.,控制是否輸出log。/ 自定義log輸出LogUtils.customLogger = new xxxLogger()
29、;LogUtils.d("wyouflf");關(guān)于作者Email: wyouflf, wyouflf近來有一些其他網(wǎng)站盜用本博客內(nèi)容,希望尊重作者。如有問題請(qǐng)留言,轉(zhuǎn)載注明出處。參考:項(xiàng)目git地址實(shí)例:數(shù)據(jù)傳遞接口定義java view plaincopyprint?public interface IOAuthCallBack public void getIOAuthCallBack(String result);
30、160; 接口調(diào)用:java view plaincopyprint?new xUtilsPost().cancelOrder(
31、0; PZTuanApplication.appUserName, orderId + "&q
32、uot;, new IOAuthCallBack()
33、 public void getIOAuthCallBack(
34、160; String result) &
35、#160; / TODO Auto-generated method stub
36、160; try
37、; JSONObject jo = new JSONObject(
38、160; result);
39、 Message msg = cancelOrder
40、160; .obtainMessage(id,
41、160;jo);
42、0; cancelOrder.sendMessage(msg);
43、; catch (JSONException e)
44、160; / TODO Auto-generated catch
45、160; / block
46、160; e.printStackTrace();
47、
48、
49、); 實(shí)例,BitmapUtils:java view plaincopyprint?public class xUtilsImageLoader /框架里面設(shè)置了緩存和異步操作,不用單獨(dú)設(shè)置線程池和緩存機(jī)制(也可以自定義緩存路徑) private BitmapUtils bitmapUtils; private Context mConte
50、xt; public xUtilsImageLoader(Context context) / TODO Auto-generated constructor stub this.mContext&
51、#160;= context; bitmapUtils = new BitmapUtils(mContext); bitmapUtils.configDefaultLoadingImage(R.drawable.logo_new);/默認(rèn)背景圖片
52、60; bitmapUtils.configDefaultLoadFailedImage(R.drawable.logo_new);/加載失敗圖片 bitmapUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565);/設(shè)置圖片壓縮類型
53、160;/* * * author sunglasses * category 圖片回調(diào)函數(shù) */ public class CustomBitmapLoadCallBack
54、160;extends DefaultBitmapLoadCallBack<ImageView> Override public void&
55、#160;onLoading(ImageView container, String uri, BitmapDisplayConfig config, long total, long current)
56、0; Override public void onLoadCompleted(ImageView container, String uri, &
57、#160; Bitmap bitmap, BitmapDisplayConfig config, BitmapLoadFrom from) / super.onLoadCompleted(container, uri, bitmap, config,
58、 from); fadeInDisplay(container, bitmap); Override
59、160; public void onLoadFailed(ImageView container, String uri, Drawable drawable)
60、; / TODO Auto-generated method stub private static final ColorDrawable TRANSPARENT
61、_DRAWABLE = new ColorDrawable( android.R.color.transparent); /* * author sunglasses *
62、160;category 圖片加載效果 * param imageView * param bitmap */ private void fadeInDisplay(ImageView imageView, Bitmap
63、;bitmap) /目前流行的漸變效果 final TransitionDrawable transitionDrawable = new TransitionDrawable( new Drawa
64、ble TRANSPARENT_DRAWABLE, new BitmapDrawable(imageView.getResources(), bitmap) );
65、160; imageView.setImageDrawable(transitionDrawable); transitionDrawable.startTransition(500); public void display(ImageView container,Stri
66、ng url)/外部接口函數(shù) bitmapUtils.display(container, url,new CustomBitmapLoadCallBack(); 實(shí)例:HttpGet:java view plaincopyprint?public class xUtilsGet /自動(dòng)實(shí)現(xiàn)異步處理,自
67、己不用處理 public void getJson(String url,RequestParams params,final IOAuthCallBack iOAuthCallBack) HttpUtils http = new HttpUtils();
68、0; http.configCurrentHttpCacheExpiry(1000 * 10);/設(shè)置超時(shí)時(shí)間 http.send(HttpMethod.GET, url, params, new RequestCallBack<String>() /接口回調(diào)
69、; Override public void onFailure(HttpException arg0, String arg1)
70、160; / TODO Auto-generated method stub Ove
71、rride public void onSuccess(ResponseInfo<String> info) / TODO Auto-genera
72、ted method stub iOAuthCallBack.getIOAuthCallBack(info.result);/利用接口回調(diào)數(shù)據(jù)傳輸
73、160; ); public void getCataJson(int cityId,IOAuthCallBack iOAuthCallBack) /外部接口函數(shù) String url = "
74、http:/xxxxxxxxxx" RequestParams params = new RequestParams(); params.addQueryStringParameter("currentCityId", cityId+"");
75、; getJson(url,params,iOAuthCallBack); 實(shí)例:HttpPost(和HttpGet類似):java view plaincopyprint?public class xUtilsPost /自動(dòng)實(shí)現(xiàn)異步處理 public void doPost(String url, RequestParams params, final IOAuthCallBack iOAuthCallBack)&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初任法官考試題庫及答案
- 廣告設(shè)計(jì)師備考的步驟試題及答案
- 安居人性測(cè)試題及答案
- 測(cè)繪考試題庫及答案解析
- 女孩口紅測(cè)試題及答案
- 內(nèi)蒙古天津試題及答案
- 2024廣告設(shè)計(jì)師考試設(shè)計(jì)創(chuàng)新方法題及答案
- 機(jī)床基礎(chǔ)知識(shí)試題及答案
- 生日蛋糕制作試題及答案
- 漢語考試題目及答案
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診)英語試卷(含答案)
- 焊工作業(yè)證理論考試練習(xí)題(100題)含答案
- 2022年浙江省煙草專賣局(公司)業(yè)務(wù)類崗位招聘考試試題及答案
- 課件:氣象雷達(dá)講解
- 《金屬非金屬地下礦山監(jiān)測(cè)監(jiān)控系統(tǒng)建設(shè)規(guī)范》
- 浙江2024年01月高考:《信息技術(shù)》考試真題與參考答案
- 反比例函數(shù)教材分析上學(xué)期浙教版
- 粉罐安裝方案
- 生物信息學(xué)與人工智能的融合創(chuàng)新
- 腹股溝疝課件
- 中醫(yī)藥農(nóng)藥的活性成分與作用機(jī)理
評(píng)論
0/150
提交評(píng)論