




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、最近搜了一些框架供初學(xué)者學(xué)習(xí),比較了一下XUtils是目前git上比較活躍 功能比較完善的一個(gè)框架,是基于afinal開發(fā)的,比afinal穩(wěn)定性提高了不少,下面是介紹:鑒于大家的熱情,我又寫了一篇Android 最火框架XUtils之注解機(jī)制詳解<-點(diǎn)擊查看xUtils簡(jiǎn)介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)閉;可通過(guò)注解自定義表名,列名,外鍵,唯一性約束,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á)查詢,更直觀的查詢語(yǔ)義,參考下面的介紹或sample中的例子。ViewUtils模塊:android中的ioc框架,完全注解方式就可以進(jìn)行UI,資源和事件綁定;新的事件綁定方式,使用混淆工具混淆后仍可正常工作;目前支持常用的20種事件綁定,參見(jiàn)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)過(guò)期時(shí)間和針對(duì)當(dāng)前請(qǐng)求的過(guò)期時(shí)間。BitmapUtils模塊:加載bitmap的時(shí)候無(wú)需考慮bitmap加
4、載過(guò)程中出現(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屬性,或者有通過(guò)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);/通過(guò)類型查找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綁定和事件綁定。無(wú)需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)/ 更多事件支持參見(jiàn)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í)可通過(guò)PauseOnScrollListener控制滑動(dòng)和快速滑動(dòng)過(guò)程中時(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近來(lái)有一些其他網(wǎng)站盜用本博客內(nèi)容,希望尊重作者。如有問(wèn)題請(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)廢水處理技術(shù)與方法
- 工業(yè)機(jī)器人技術(shù)與發(fā)展趨勢(shì)
- 工業(yè)廢水處理技術(shù)創(chuàng)新研究
- 工業(yè)污染防治與綠色技術(shù)創(chuàng)新
- 工業(yè)機(jī)器人動(dòng)力學(xué)設(shè)計(jì)與應(yīng)用
- 工業(yè)綠色化轉(zhuǎn)型策略與方案
- 工業(yè)節(jié)能與新能源技術(shù)應(yīng)用
- 工業(yè)燃?xì)夤芫W(wǎng)的智能化管理研究
- 工業(yè)節(jié)能減排的先進(jìn)技術(shù)與方法
- 工作中的自我激勵(lì)方法探討
- 2025年健康管理師考試試題及答案
- 2024年地理中考模擬考試地理(貴州貴陽(yáng)卷)(A4考試版)
- 2025年廣東省深圳市中考數(shù)學(xué)高頻考點(diǎn)綜合訓(xùn)練題及答案
- 職業(yè)道德與法治知識(shí)點(diǎn)總結(jié)中職高教版
- 2025至2030中國(guó)黃原膠生產(chǎn)技術(shù)行業(yè)發(fā)展形勢(shì)及未來(lái)前景展望報(bào)告
- (高清版)DB50∕T 689-2016 合成鉆石鑒定技術(shù)規(guī)范
- 建筑工程施工安全服務(wù)方案及質(zhì)量保障措施
- 行政執(zhí)法三項(xiàng)制度培訓(xùn)課件
- 公司加減分管理制度
- 中小學(xué)科學(xué)教育問(wèn)題試題及答案教師資格筆試
- DB51-T 3267-2025 公路應(yīng)急搶通保通技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論