Android中XUtils3架構使用方法詳解(一)_Android

來源:互聯網
上載者:User

xUtils簡介

xUtils 包含了很多實用的android工具。

xUtils 支援大檔案上傳,更全面的http請求協議支援(10種謂詞),擁有更加靈活的ORM,更多的事件註解支援且不受混淆影響...

xUitls 最低相容android 2.2 (api level 8)

今天給大家帶來XUtils3的基本介紹,本文章的案例都是基於XUtils3的API文法進行的示範。相信大家對這個架構也都瞭解過,

下面簡單介紹下XUtils3的一些基本知識。

XUtils3一共有4大功能:註解模組,網路模組,圖片載入模組,資料庫模組。

使用XUtils只需要在libs檔案夾裡面加入一個jar包,如果對伺服器返回的資料進行封裝的話,還需要匯入一個Gson的jar包。

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

註解模組

Activity的註解

1.在Application的oncreate方法中加入下面代碼:

x.Ext.init(this);

2.在Activity的oncreate方法中加入下面代碼:

x.view().inject(this);

3.載入當前的Activity布局需要如下註解:

@ContentView加入到Activity的上方

4.給View進行初始化需要如下註解:

@InjectView

5.處理控制項的各種響應事件需要如下註解:

@Envent

@ContentView(R.layout.activity_main) public class MainActivity extends ActionBarActivity { @ViewInject(R.id.btn_get) Button btn_get; @ViewInject(R.id.btn_post) Button btn_post; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); x.view().inject(this); btn_get.setText("發送get請求"); btn_post.setText("發送post請求"); } //等同於@Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class) @Event(value={R.id.btn_get,R.id.btn_post}) private void getEvent(View view){ switch(view.getId()){ case R.id.btn_get: Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show(); break; case R.id.btn_post: Toast.makeText(MainActivity.this, btn_post.getText().toString().trim(), 0).show(); break; } } 

通過測試,我們發現當點擊btn_get按鈕時,彈出了“發送get請求”的效果。到這裡,大家算是對XUtils的註解有個一個基本的認識,下面我在強調一點的是,@Event這個註解預設情況下type屬性為View.OnClickListener.class.如果你想實現其餘點擊事件效果,只需要把type值進行修改即可。

另外需要注意的一點是按鈕的點擊事件必須用private進行修飾。

Fragment的註解:

@ContentView(R.layout.fragment_first) public class FirstFragment extends Fragment{ private MyAdapter adapter; private List<Person> list=new ArrayList<>(); private List<String> listUrl=new ArrayList<>(); private List<String> listName=new ArrayList<>(); @ViewInject(R.id.btn_test) Button btn_test; @ViewInject(R.id.listView) ListView listView; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return x.view().inject(this, inflater, container); } 

ViewHolder的註解:

public class MyAdapter extends BaseAdapter{ private Context context; private List<Person> list; private LayoutInflater mInflater; private ImageOptions options; public ViewHolder holder; public MyAdapter(Context context, List<Person> list) { this.context = context; this.list = list; this.mInflater=LayoutInflater.from(context); options=new ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher) .setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build(); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { holder=null; if(convertView==null){ convertView=mInflater.inflate(R.layout.itemone, null); holder=new ViewHolder(); x.view().inject(holder,convertView); convertView.setTag(holder); } else{ holder=(ViewHolder) convertView.getTag(); } Person bean=list.get(position); holder.tv_name.setText(bean.getName()); x.image().bind(holder.iv_image, bean.getImgUrl(), options); return convertView; } class ViewHolder{ @ViewInject(R.id.tv_name) private TextView tv_name; @ViewInject(R.id.iv_image) private ImageView iv_image; } 

上面的代碼是註解ViewHolder的標準模式,相信大家完全能夠看明白。這裡我載入圖片使用到了XUtils3的載入網狀圖片的方法。後面我會詳細進行講解。

網路模組

XUtils的網路要求方法和一些網路請求架構的用法非常類似,我進行了一些簡單的封裝。

封裝一共有3個檔案,分別是網路請求工具類XUtil,請求響應資料的解析類,還有一個就是一個請求成功的一個介面回調類。

代碼如下:

public class XUtil { /** * 發送get請求 * @param <T> */ public static <T> Cancelable Get(String url,Map<String,String> map,CommonCallback<T> callback){ RequestParams params=new RequestParams(url); if(null!=map){ for(Map.Entry<String, String> entry : map.entrySet()){ params.addQueryStringParameter(entry.getKey(), entry.getValue()); } } Cancelable cancelable = x.http().get(params, callback); return cancelable; } /** * 發送post請求 * @param <T> */ public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){ RequestParams params=new RequestParams(url); if(null!=map){ for(Map.Entry<String, Object> entry : map.entrySet()){ params.addParameter(entry.getKey(), entry.getValue()); } } Cancelable cancelable = x.http().post(params, callback); return cancelable; } /** * 上傳檔案 * @param <T> */ public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){ RequestParams params=new RequestParams(url); if(null!=map){ for(Map.Entry<String, Object> entry : map.entrySet()){ params.addParameter(entry.getKey(), entry.getValue()); } } params.setMultipart(true); Cancelable cancelable = x.http().get(params, callback); return cancelable; } /** * 下載檔案 * @param <T> */ public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> callback){ RequestParams params=new RequestParams(url); //設定斷點續傳 params.setAutoResume(true); params.setSaveFilePath(filepath); Cancelable cancelable = x.http().get(params, callback); return cancelable; } } public class JsonResponseParser implements ResponseParser { //檢查伺服器返回的回應標頭資訊 @Override public void checkResponse(UriRequest request) throws Throwable { } /** * 轉換result為resultType類型的對象 * * @param resultType 傳回值類型(可能帶有泛型資訊) * @param resultClass 傳回值類型 * @param result 字串資料 * @return * @throws Throwable */ @Override public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable { return new Gson().fromJson(result, resultClass); } } public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{ @Override public void onSuccess(ResultType result) { //可以根據公司的需求進行統一的請求成功的邏輯處理 } @Override public void onError(Throwable ex, boolean isOnCallback) { //可以根據公司的需求進行統一的請求網路失敗的邏輯處理 } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } } 

1.發送get請求樣本:

//本get請求來自於免費測試介面:http://www.k780.com/api/entry.baidu String url="http://api.k780.com:88/?app=idcard.get"; Map<String,String> map=new HashMap<>(); map.put("appkey", "10003"); map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); map.put("format", "json"); map.put("idcard", "110101199001011114"); XUtil.Get(url, map, new MyCallBack<PersonInfoBean>(){ @Override public void onSuccess(PersonInfoBean result) { super.onSuccess(result); Log.e("result", result.toString()); } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } }); 

2.發送post請求

String url="http://api.k780.com:88/?app=idcard.get"; Map<String,Object> map=new HashMap<>(); map.put("appkey", "10003"); map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); map.put("format", "json"); map.put("idcard", "110101199001011114"); XUtil.Post(url, map, new MyCallBack<PersonInfoBean>(){ @Override public void onSuccess(PersonInfoBean result) { super.onSuccess(result); Log.e("result", result.toString()); } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } }); 

3.上傳檔案

/** * 上傳檔案(支援多檔案上傳) */ private void uploadfile() { //圖片上傳地址 String url=""; Map<String,Object> map=new HashMap<>(); //傳入自己的相應參數 //map.put(key, value); //map.put(key, value); XUtil.UpLoadFile(url, map, new MyCallBack<String>(){ @Override public void onSuccess(String result) { super.onSuccess(result); } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } }); } 

4.下載檔案

private void downloadfile() { //檔案下載地址 String url=""; //檔案儲存在本地的路徑 String filepath=""; XUtil.DownLoadFile(url, filepath,new MyCallBack<File>(){ @Override public void onSuccess(File result) { super.onSuccess(result); } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } }); 

5.下載檔案帶進度條

private void downloadprogressfile() { //檔案下載地址 String url=""; //檔案儲存在本地的路徑 String filepath=""; XUtil.DownLoadFile(url, filepath,new MyProgressCallBack<File>(){ @Override public void onSuccess(File result) { super.onSuccess(result); } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } @Override public void onLoading(long total, long current, boolean isDownloading) { super.onLoading(total, current, isDownloading); } }); } 

6.發送get請求(伺服器以xml格式返回)

private void getxml() { String url="http://flash.weather.com.cn/wmaps/xml/china.xml"; XUtil.Get(url, null, new MyCallBack<String>(){ @Override public void onSuccess(String xmlString) { super.onSuccess(xmlString); try{ XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlString)); int eventType = xmlPullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: String nodeName = xmlPullParser.getName(); if ("city".equals(nodeName)) { String pName = xmlPullParser.getAttributeValue(0); Log.e("TAG", "city is " + pName); } break; } eventType = xmlPullParser.next(); } }catch(Exception e){ e.printStackTrace(); } } @Override public void onError(Throwable ex, boolean isOnCallback) { super.onError(ex, isOnCallback); } }); } 

圖片載入模組

用法:

x.image().bind(imageView, url, imageOptions); x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions); x.image().bind(imageView, "assets://test.gif", imageOptions); x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...}); x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...}); x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...}); 

Xutils3的api還是比較簡單的,相信大家都可以看懂,第一個參數傳入一個View,第二個參數傳入一個圖片的網路地址,第三個參數一般是載入圖片的配置。

下面看一下ImageOptions這個類吧:

ImageOptions options=new ImageOptions.Builder() //設定載入過程中的圖片 .setLoadingDrawableId(R.drawable.ic_launcher) //設定載入失敗後的圖片 .setFailureDrawableId(R.drawable.ic_launcher) //設定使用緩衝 .setUseMemCache(true) //設定顯示圓形圖片 .setCircular(true) //設定支援gif .setIgnoreGif(false) .build(); 

其餘的一些配置請參考源碼

如果需要對載入的圖片進行操作的話,可以使用:

x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});

通過返回的Drawable對象進行圖片的處理,滿足項目的個人化的要求.

說了這麼多,我想大家至少會對XUtils3有了一個基本的瞭解,由於XUtils3的資料庫的用法比較多,本篇文章不會去涉及,下一篇文章我會為大家詳細講解XUtils3的資料庫模組。大家趕緊現在動手操作一下吧!本文涉及到的所有執行個體都會在下面的demo中有涉及到,請自行參考。

相關閱讀:

用xutils3.0進行下載項目更新

Android xUtils更新到3.0後的基本使用規則詳解

以上所述是小編給大家介紹的Android中XUtils3架構使用方法詳解(一),希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.