xutils發送POST_第1頁
xutils發送POST_第2頁
xutils發送POST_第3頁
xutils發送POST_第4頁
xutils發送POST_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、最近搜了一些框架供初學者學習,比較了一下XUtils是目前git上比較活躍 功能比較完善的一個框架,是基于afinal開發的,比afinal穩定性提高了不少,下面是介紹:鑒于大家的熱情,我又寫了一篇Android 最火框架XUtils之注解機制詳解<-點擊查看xUtils簡介xUtils 包含了很多實用的android工具。xUtils 最初源于Afinal框架,進行了大量重構,使得xUtils支持大文件上傳,更全面的http請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響.xUitls最低兼容android 2.2 (api level 8)目前xUt

2、ils主要有四大模塊:DbUtils模塊:android中的orm框架,一行代碼就可以進行增刪改查;支持事務,默認關閉;可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請注解表名和列名);支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;自動加載外鍵關聯實體,支持延時加載;支持鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。ViewUtils模塊:android中的ioc框架,完全注解方式就可以進行UI,資源和事件綁定;新的事件綁定方式,使用混淆工具混淆后仍可正常工作;目前支持常用的20種事件綁定,參見ViewComm

3、onEventListener類和包com.lidroid.xutils.view.annotation.event。HttpUtils模塊:支持同步,異步方式的請求;支持大文件上傳,上傳大文件不會oom;支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;下載支持301/302重定向,支持設置是否根據Content-Disposition重命名下載的文件;返回文本內容的請求(默認只啟用了GET請求)支持緩存,可設置默認過期時間和針對當前請求的過期時間。BitmapUtils模塊:加載bitmap的時候無需考慮bitmap加

4、載過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;支持加載網絡圖片和本地圖片;內存管理使用lru算法,更好的管理bitmap內存;可配置線程加載線程數量,緩存大小,緩存路徑,加載顯示動畫等.使用xUtils快速開發框架需要有以下權限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

5、 混淆時注意事項:添加Android默認混淆配置$sdk.dir/tools/proguard/proguard-android.txt不要混淆xUtils中的注解類型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation *; 對使用DbUtils模塊持久化的實體類不要混淆,或者注解所有表和列名稱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對象必須有id屬性,或者有通過ID注解的屬性user.setEmail("wyouflf");user.setName("wyouflf");db.save(user); / 使用saveBindingId保存實體時會為實體的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"時,最后一個參數必須是數組或Iterable的實現類(例如List等)Parent test = db.findFirst(Selector.from(Parent.class).where("i

10、d", "in", new int1, 2, 3);/ op為"between"時,最后一個參數必須是數組或Iterable的實現類(例如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、/ 執行自定義sql.ViewUtils使用方法完全注解方式就可以進行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綁定不受混淆影響/ 支持綁定多個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類和包com.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上傳文件 或者 提交數據 到服務器(post方

19、法)RequestParams params = new RequestParams();params.addHeader("name", "value");params.addQueryStringParameter("name", "value");/ 只包含字符串參數時默認使用BodyParamsEntity,/ 類似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。params.addBodyParameter(&quo

20、t;name", "value");/ 加入文件參數后默認使用MultipartEntity("multipart/form-data"),/ 如需"multipart/related",xUtils中提供的MultipartEntity支持設置subType為"related"。/ 使用params.setBodyEntity(httpEntity)可設置更多類型的HttpEntity(如:/ MultipartEntity,BodyParamsEntity,FileUploadEntity,Input

21、StreamUploadEntity,StringEntity)。/ 例如發送json參數: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下載文件:支持斷點續傳,隨時停止下載任務,開始任務HttpUtils http = new HttpUtils();HttpHandler handler = http.download(" "/sdcard/httpcomponents-client-4.2.5-src.zip", true, / 如果目標文件存在,接著未完成的部分繼續下載。服務器不支持RANGE時將從新下載。 true, / 如果從請求返回信息中獲取到文件名,下載完成后自動重命名。 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); );./調用cancel()方法停止下載handler.cancel();BitmapUtils 使用方法BitmapUtils bitmapUtils = new BitmapUtils(this);/ 加載網絡圖片bitmapUtils.display(testImageView, "/ 加載本地

27、圖片(路徑以/開頭, 絕對路徑)bitmapUtils.display(testImageView, "/sdcard/test.jpg");/ 加載assets中的圖片(路徑以assets開頭)bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");/ 使用ListView等容器展示圖片時可通過PauseOnScrollListener控制滑動和快速滑動過程中時候暫停加載圖片listView.setOnScrollListener(new PauseOnScrollListener(

28、bitmapUtils, false, true);listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener);輸出日志 LogUtils/ 自動添加TAG,格式: className.methodName(L:lineNumber)/ 可設置全局的LogUtils.allowD = false,LogUtils.allowI = false.,控制是否輸出log。/ 自定義log輸出LogUtils.customLogger = new xxxLogger()

29、;LogUtils.d("wyouflf");關于作者Email: wyouflf, wyouflf近來有一些其他網站盜用本博客內容,希望尊重作者。如有問題請留言,轉載注明出處。參考:項目git地址實例:數據傳遞接口定義java view plaincopyprint?public interface IOAuthCallBack       public void getIOAuthCallBack(String result);&#

30、160;   接口調用: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、);  實例,BitmapUtils:java view plaincopyprint?public class xUtilsImageLoader /框架里面設置了緩存和異步操作,不用單獨設置線程池和緩存機制(也可以自定義緩存路徑)        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);/默認背景圖片      

52、60;   bitmapUtils.configDefaultLoadFailedImage(R.drawable.logo_new);/加載失敗圖片          bitmapUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565);/設置圖片壓縮類型             &#

53、160;/*      *       * author sunglasses      * category 圖片回調函數      */      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)/外部接口函數          bitmapUtils.display(container, url,new CustomBitmapLoadCallBack();          實例:HttpGet:java view plaincopyprint?public class xUtilsGet /自動實現異步處理,自

67、己不用處理        public void getJson(String url,RequestParams params,final IOAuthCallBack iOAuthCallBack)            HttpUtils http = new HttpUtils();

68、0;         http.configCurrentHttpCacheExpiry(1000 * 10);/設置超時時間          http.send(HttpMethod.GET, url, params, new RequestCallBack<String>() /接口回調   

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);/利用接口回調數據傳輸                  &#

73、160;     );            public void getCataJson(int cityId,IOAuthCallBack iOAuthCallBack) /外部接口函數          String url = "

74、http:/xxxxxxxxxx"          RequestParams params = new RequestParams();          params.addQueryStringParameter("currentCityId", cityId+"");  

75、;        getJson(url,params,iOAuthCallBack);          實例:HttpPost(和HttpGet類似):java view plaincopyprint?public class xUtilsPost /自動實現異步處理        public void doPost(String url, RequestParams params,              final IOAuthCallBack iOAuthCallBack)&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論