XUtils3框架的基本使用方法(一)

来源:互联网 发布:手机淘宝聊天记录删除 编辑:程序博客网 时间:2024/05/08 10:09

本文为作者原创,转载请指明出处:
http://blog.csdn.net/a1002450926/article/details/50341173

今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示。相信大家对这个框架也都了解过,下面简单介绍下XUtils3的一些基本知识。
XUtils3一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。
使用XUtils只需要在libs文件夹里面加入一个jar包,如果对服务器返回的数据进行封装的话,还需要导入一个Gson的jar包。
所需权限:

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.INTERNET"</span> /></span>  <span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.WRITE_EXTERNAL_STORAGE"</span> /></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li></ul>

注解模块

Activity的注解
1.在Application的oncreate方法中加入下面代码:
x.Ext.init(this);
2.在Activity的oncreate方法中加入下面代码:
x.view().inject(this);
3.加载当前的Activity布局需要如下注解:
@ContentView加入到Activity的上方
4.给View进行初始化需要如下注解:
@InjectView
5.处理控件的各种响应事件需要如下注解:
@Envent
示例如下:

<code class="hljs avrasm has-numbering">    @ContentView(R<span class="hljs-preprocessor">.layout</span><span class="hljs-preprocessor">.activity</span>_main)public class MainActivity extends ActionBarActivity {    @ViewInject(R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_get)    Button btn_get<span class="hljs-comment">;</span>    @ViewInject(R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_post)    Button btn_post<span class="hljs-comment">;</span>    @Override    protected void onCreate(Bundle savedInstanceState) {        super<span class="hljs-preprocessor">.onCreate</span>(savedInstanceState)<span class="hljs-comment">;</span>        <span class="hljs-built_in">x</span><span class="hljs-preprocessor">.view</span>()<span class="hljs-preprocessor">.inject</span>(this)<span class="hljs-comment">;</span>        btn_get<span class="hljs-preprocessor">.setText</span>(<span class="hljs-string">"发送get请求"</span>)<span class="hljs-comment">;</span>        btn_post<span class="hljs-preprocessor">.setText</span>(<span class="hljs-string">"发送post请求"</span>)<span class="hljs-comment">;</span>    }    //等同于@Event(value={R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_get,R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_post},type=View<span class="hljs-preprocessor">.OnClickListener</span><span class="hljs-preprocessor">.class</span>)    @Event(value={R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_get,R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_post})    private void getEvent(View view){        switch(view<span class="hljs-preprocessor">.getId</span>()){        case R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_get:            Toast<span class="hljs-preprocessor">.makeText</span>(MainActivity<span class="hljs-preprocessor">.this</span>, btn_get<span class="hljs-preprocessor">.getText</span>()<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.trim</span>(), <span class="hljs-number">0</span>)<span class="hljs-preprocessor">.show</span>()<span class="hljs-comment">;</span>            <span class="hljs-keyword">break</span><span class="hljs-comment">;</span>        case R<span class="hljs-preprocessor">.id</span><span class="hljs-preprocessor">.btn</span>_post:            Toast<span class="hljs-preprocessor">.makeText</span>(MainActivity<span class="hljs-preprocessor">.this</span>, btn_post<span class="hljs-preprocessor">.getText</span>()<span class="hljs-preprocessor">.toString</span>()<span class="hljs-preprocessor">.trim</span>(), <span class="hljs-number">0</span>)<span class="hljs-preprocessor">.show</span>()<span class="hljs-comment">;</span>            <span class="hljs-keyword">break</span><span class="hljs-comment">;</span>        }    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li></ul>

通过测试,我们发现当点击btn_get按钮时,弹出了“发送get请求”的效果。到这里,大家算是对XUtils的注解有个一个基本的认识,下面我在强调一点的是,@Event这个注解默认情况下type属性为View.OnClickListener.class.如果你想实现其余点击事件效果,只需要把type值进行修改即可。
另外需要注意的一点是按钮的点击事件必须用private进行修饰。

Fragment的注解:

<code class="hljs java has-numbering"><span class="hljs-annotation">@ContentView</span>(R.layout.fragment_first)  <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FirstFragment</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Fragment</span>{</span>      <span class="hljs-keyword">private</span> MyAdapter adapter;    <span class="hljs-keyword">private</span> List<Person> list=<span class="hljs-keyword">new</span> ArrayList<>();      <span class="hljs-keyword">private</span> List<String> listUrl=<span class="hljs-keyword">new</span> ArrayList<>();      <span class="hljs-keyword">private</span> List<String> listName=<span class="hljs-keyword">new</span> ArrayList<>();        <span class="hljs-annotation">@ViewInject</span>(R.id.btn_test)    Button btn_test;    <span class="hljs-annotation">@ViewInject</span>(R.id.listView)    ListView listView;    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> View <span class="hljs-title">onCreateView</span>(LayoutInflater inflater,            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        <span class="hljs-keyword">return</span>  x.view().inject(<span class="hljs-keyword">this</span>, inflater, container);    } </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul>

ViewHolder的注解:

<code class="hljs java has-numbering">    <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyAdapter</span> <span class="hljs-keyword">extends</span>  <span class="hljs-title">BaseAdapter</span>{</span>    <span class="hljs-keyword">private</span> Context context;    <span class="hljs-keyword">private</span> List<Person> list;    <span class="hljs-keyword">private</span> LayoutInflater mInflater;    <span class="hljs-keyword">private</span> ImageOptions options;    <span class="hljs-keyword">public</span> ViewHolder holder;    <span class="hljs-keyword">public</span> <span class="hljs-title">MyAdapter</span>(Context context, List<Person> list) {        <span class="hljs-keyword">this</span>.context = context;        <span class="hljs-keyword">this</span>.list = list;        <span class="hljs-keyword">this</span>.mInflater=LayoutInflater.from(context);        options=<span class="hljs-keyword">new</span> ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher)                .setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(<span class="hljs-keyword">true</span>).setCircular(<span class="hljs-keyword">true</span>).build();    }    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getCount</span>() {        <span class="hljs-keyword">return</span> list.size();    }    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> Object <span class="hljs-title">getItem</span>(<span class="hljs-keyword">int</span> position) {        <span class="hljs-keyword">return</span> list.get(position);    }    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">long</span> <span class="hljs-title">getItemId</span>(<span class="hljs-keyword">int</span> position) {        <span class="hljs-keyword">return</span> position;    }    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> View <span class="hljs-title">getView</span>(<span class="hljs-keyword">int</span> position, View convertView, ViewGroup parent) {        holder=<span class="hljs-keyword">null</span>;        <span class="hljs-keyword">if</span>(convertView==<span class="hljs-keyword">null</span>){            convertView=mInflater.inflate(R.layout.itemone, <span class="hljs-keyword">null</span>);            holder=<span class="hljs-keyword">new</span> ViewHolder();            x.view().inject(holder,convertView);            convertView.setTag(holder);        }        <span class="hljs-keyword">else</span>{            holder=(ViewHolder) convertView.getTag();        }        Person bean=list.get(position);        holder.tv_name.setText(bean.getName());        x.image().bind(holder.iv_image, bean.getImgUrl(), options);        <span class="hljs-keyword">return</span> convertView;    }    class ViewHolder{        <span class="hljs-annotation">@ViewInject</span>(R.id.tv_name)        <span class="hljs-keyword">private</span> TextView tv_name;        <span class="hljs-annotation">@ViewInject</span>(R.id.iv_image)        <span class="hljs-keyword">private</span> ImageView iv_image;    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li></ul>

上面的代码是注解ViewHolder的标准模式,相信大家完全能够看明白。这里我加载图片使用到了XUtils3的加载网络图片的方法。后面我会详细进行讲解。

网络模块

XUtils的网络请求方法和一些网络请求框架的用法非常类似,我进行了一些简单的封装。
封装一共有3个文件,分别是网络请求工具类XUtil,请求响应数据的解析类,还有一个就是一个请求成功的一个接口回调类。
代码如下:

<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">XUtil</span> {</span>    <span class="hljs-javadoc">/**     * 发送get请求     *<span class="hljs-javadoctag"> @param</span> <T>     */</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <T> Cancelable <span class="hljs-title">Get</span>(String url,Map<String,String> map,CommonCallback<T> callback){        RequestParams params=<span class="hljs-keyword">new</span> RequestParams(url);        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">null</span>!=map){            <span class="hljs-keyword">for</span>(Map.Entry<String, String> entry : map.entrySet()){                params.addQueryStringParameter(entry.getKey(), entry.getValue());            }        }        Cancelable cancelable = x.http().get(params, callback);        <span class="hljs-keyword">return</span> cancelable;    }    <span class="hljs-javadoc">/**     * 发送post请求     *<span class="hljs-javadoctag"> @param</span> <T>     */</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <T> Cancelable <span class="hljs-title">Post</span>(String url,Map<String,Object> map,CommonCallback<T> callback){        RequestParams params=<span class="hljs-keyword">new</span> RequestParams(url);        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">null</span>!=map){            <span class="hljs-keyword">for</span>(Map.Entry<String, Object> entry : map.entrySet()){                params.addParameter(entry.getKey(), entry.getValue());            }        }        Cancelable cancelable = x.http().post(params, callback);        <span class="hljs-keyword">return</span> cancelable;    }    <span class="hljs-javadoc">/**     * 上传文件     *<span class="hljs-javadoctag"> @param</span> <T>     */</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <T> Cancelable <span class="hljs-title">UpLoadFile</span>(String url,Map<String,Object> map,CommonCallback<T> callback){        RequestParams params=<span class="hljs-keyword">new</span> RequestParams(url);        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">null</span>!=map){            <span class="hljs-keyword">for</span>(Map.Entry<String, Object> entry : map.entrySet()){                params.addParameter(entry.getKey(), entry.getValue());            }        }        params.setMultipart(<span class="hljs-keyword">true</span>);        Cancelable cancelable = x.http().post(params, callback);        <span class="hljs-keyword">return</span> cancelable;    }    <span class="hljs-javadoc">/**     * 下载文件     *<span class="hljs-javadoctag"> @param</span> <T>     */</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <T> Cancelable <span class="hljs-title">DownLoadFile</span>(String url,String filepath,CommonCallback<T> callback){        RequestParams params=<span class="hljs-keyword">new</span> RequestParams(url);        <span class="hljs-comment">//设置断点续传</span>        params.setAutoResume(<span class="hljs-keyword">true</span>);        params.setSaveFilePath(filepath);        Cancelable cancelable = x.http().get(params, callback);        <span class="hljs-keyword">return</span> cancelable;    }}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li></ul>
<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">JsonResponseParser</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">ResponseParser</span> {</span>    <span class="hljs-comment">//检查服务器返回的响应头信息</span>    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">checkResponse</span>(UriRequest request) <span class="hljs-keyword">throws</span> Throwable {    }    <span class="hljs-javadoc">/**     * 转换result为resultType类型的对象     *     *<span class="hljs-javadoctag"> @param</span> resultType  返回值类型(可能带有泛型信息)     *<span class="hljs-javadoctag"> @param</span> resultClass 返回值类型     *<span class="hljs-javadoctag"> @param</span> result      字符串数据     *<span class="hljs-javadoctag"> @return</span>     *<span class="hljs-javadoctag"> @throws</span> Throwable     */</span>    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">public</span> Object <span class="hljs-title">parse</span>(Type resultType, Class<?> resultClass, String result) <span class="hljs-keyword">throws</span> Throwable {        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Gson().fromJson(result, resultClass);    }}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul>
<code class="hljs axapta has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyCallBack</span><<span class="hljs-title">ResultType</span>> <span class="hljs-inheritance"><span class="hljs-keyword">implements</span></span> <span class="hljs-title">Callback</span>.<span class="hljs-title">CommonCallback</span><<span class="hljs-title">ResultType</span>>{</span>    @Override    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onSuccess(ResultType result) {        <span class="hljs-comment">//可以根据公司的需求进行统一的请求成功的逻辑处理</span>    }    @Override    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onError(Throwable ex, <span class="hljs-keyword">boolean</span> isOnCallback) {        <span class="hljs-comment">//可以根据公司的需求进行统一的请求网络失败的逻辑处理</span>    }    @Override    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onCancelled(CancelledException cex) {    }    @Override    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onFinished() {    }}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>

1.发送get请求示例:

<code class="hljs lasso has-numbering"><span class="hljs-comment">//本get请求来自于免费测试接口:http://www.k780.com/api/entry.baidu</span><span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://api.k780.com:88/?app=idcard.get"</span>;        <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>,<span class="hljs-built_in">String</span><span class="hljs-subst">></span> <span class="hljs-built_in">map</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> HashMap<span class="hljs-subst"><></span>();        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"appkey"</span>, <span class="hljs-string">"10003"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"sign"</span>, <span class="hljs-string">"b59bc3ef6191eb9f747dd4e83c99f2a4"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"format"</span>, <span class="hljs-string">"json"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"idcard"</span>, <span class="hljs-string">"110101199001011114"</span>);        XUtil<span class="hljs-built_in">.</span>Get(url, <span class="hljs-built_in">map</span>, <span class="hljs-literal">new</span> MyCallBack<span class="hljs-subst"><</span>PersonInfoBean<span class="hljs-subst">></span>(){            @Override            <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onSuccess(PersonInfoBean result) {                super<span class="hljs-built_in">.</span>onSuccess(result);                <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"result"</span>, result<span class="hljs-built_in">.</span>toString());            }            @Override            <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onError(Throwable ex, boolean isOnCallback) {                super<span class="hljs-built_in">.</span>onError(ex, isOnCallback);            }        });</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li></ul>

2.发送post请求

<code class="hljs lasso has-numbering"><span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://api.k780.com:88/?app=idcard.get"</span>;        <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>,Object<span class="hljs-subst">></span> <span class="hljs-built_in">map</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> HashMap<span class="hljs-subst"><></span>();        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"appkey"</span>, <span class="hljs-string">"10003"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"sign"</span>, <span class="hljs-string">"b59bc3ef6191eb9f747dd4e83c99f2a4"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"format"</span>, <span class="hljs-string">"json"</span>);        <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"idcard"</span>, <span class="hljs-string">"110101199001011114"</span>);        XUtil<span class="hljs-built_in">.</span>Post(url, <span class="hljs-built_in">map</span>, <span class="hljs-literal">new</span> MyCallBack<span class="hljs-subst"><</span>PersonInfoBean<span class="hljs-subst">></span>(){            @Override            <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onSuccess(PersonInfoBean result) {                super<span class="hljs-built_in">.</span>onSuccess(result);                <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"result"</span>, result<span class="hljs-built_in">.</span>toString());            }            @Override            <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onError(Throwable ex, boolean isOnCallback) {                super<span class="hljs-built_in">.</span>onError(ex, isOnCallback);            }        });</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul>

3.上传文件

<code class="hljs java has-numbering"><span class="hljs-javadoc">/**     * 上传文件(支持多文件上传)     */</span>    <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">uploadfile</span>() {        <span class="hljs-comment">//图片上传地址</span>        String url=<span class="hljs-string">""</span>;        Map<String,Object> map=<span class="hljs-keyword">new</span> HashMap<>();        <span class="hljs-comment">//传入自己的相应参数</span>        <span class="hljs-comment">//map.put(key, value);</span>        <span class="hljs-comment">//map.put(key, value);</span>        XUtil.UpLoadFile(url, map, <span class="hljs-keyword">new</span> MyCallBack<String>(){            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onSuccess</span>(String result) {                <span class="hljs-keyword">super</span>.onSuccess(result);            }            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span>(Throwable ex, <span class="hljs-keyword">boolean</span> isOnCallback) {                <span class="hljs-keyword">super</span>.onError(ex, isOnCallback);            }        });    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li></ul>

4.下载文件

<code class="hljs java has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">downloadfile</span>() {        <span class="hljs-comment">//文件下载地址</span>        String url=<span class="hljs-string">""</span>;        <span class="hljs-comment">//文件保存在本地的路径</span>        String filepath=<span class="hljs-string">""</span>;        XUtil.DownLoadFile(url, filepath,<span class="hljs-keyword">new</span> MyCallBack<File>(){            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onSuccess</span>(File result) {                <span class="hljs-keyword">super</span>.onSuccess(result);            }            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span>(Throwable ex, <span class="hljs-keyword">boolean</span> isOnCallback) {                <span class="hljs-keyword">super</span>.onError(ex, isOnCallback);            }        });</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li></ul>

5.下载文件带进度条

<code class="hljs java has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">downloadprogressfile</span>() {        <span class="hljs-comment">//文件下载地址</span>        String url=<span class="hljs-string">""</span>;        <span class="hljs-comment">//文件保存在本地的路径</span>        String filepath=<span class="hljs-string">""</span>;        XUtil.DownLoadFile(url, filepath,<span class="hljs-keyword">new</span> MyProgressCallBack<File>(){            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onSuccess</span>(File result) {                <span class="hljs-keyword">super</span>.onSuccess(result);            }            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span>(Throwable ex, <span class="hljs-keyword">boolean</span> isOnCallback) {                <span class="hljs-keyword">super</span>.onError(ex, isOnCallback);            }            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onLoading</span>(<span class="hljs-keyword">long</span> total, <span class="hljs-keyword">long</span> current,                    <span class="hljs-keyword">boolean</span> isDownloading) {                <span class="hljs-keyword">super</span>.onLoading(total, current, isDownloading);            }        });    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul>

6.发送get请求(服务器以xml格式返回)

<code class="hljs java has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getxml</span>() {        String url=<span class="hljs-string">"http://flash.weather.com.cn/wmaps/xml/china.xml"</span>;        XUtil.Get(url, <span class="hljs-keyword">null</span>, <span class="hljs-keyword">new</span> MyCallBack<String>(){            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onSuccess</span>(String xmlString) {                <span class="hljs-keyword">super</span>.onSuccess(xmlString);                <span class="hljs-keyword">try</span>{                    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();                      XmlPullParser xmlPullParser = factory.newPullParser();                      xmlPullParser.setInput(<span class="hljs-keyword">new</span> StringReader(xmlString));                      <span class="hljs-keyword">int</span> eventType = xmlPullParser.getEventType();                      <span class="hljs-keyword">while</span> (eventType != XmlPullParser.END_DOCUMENT) {                          <span class="hljs-keyword">switch</span> (eventType) {                          <span class="hljs-keyword">case</span> XmlPullParser.START_TAG:                              String nodeName = xmlPullParser.getName();                              <span class="hljs-keyword">if</span> (<span class="hljs-string">"city"</span>.equals(nodeName)) {                                  String pName = xmlPullParser.getAttributeValue(<span class="hljs-number">0</span>);                                  Log.e(<span class="hljs-string">"TAG"</span>, <span class="hljs-string">"city is "</span> + pName);                              }                              <span class="hljs-keyword">break</span>;                          }                          eventType = xmlPullParser.next();                      }                  }<span class="hljs-keyword">catch</span>(Exception e){                    e.printStackTrace();                }            }            <span class="hljs-annotation">@Override</span>            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span>(Throwable ex, <span class="hljs-keyword">boolean</span> isOnCallback) {                <span class="hljs-keyword">super</span>.onError(ex, isOnCallback);            }        });    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li></ul>

图片加载模块

用法:

<code class="hljs r has-numbering">x.image().bind(imageView, url, imageOptions);x.image().bind(imageView, <span class="hljs-string">"file:///sdcard/test.gif"</span>, imageOptions);x.image().bind(imageView, <span class="hljs-string">"assets://test.gif"</span>, imageOptions);x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {<span class="hljs-keyword">...</span>});x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {<span class="hljs-keyword">...</span>});x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {<span class="hljs-keyword">...</span>});</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>

Xutils3的api还是比较简单的,相信大家都可以看懂,第一个参数传入一个View,第二个参数传入一个图片的网络地址,第三个参数一般是加载图片的配置。
下面看一下ImageOptions这个类吧:

<code class="hljs avrasm has-numbering">ImageOptions options=new ImageOptions<span class="hljs-preprocessor">.Builder</span>()//设置加载过程中的图片<span class="hljs-preprocessor">.setLoadingDrawableId</span>(R<span class="hljs-preprocessor">.drawable</span><span class="hljs-preprocessor">.ic</span>_launcher)//设置加载失败后的图片<span class="hljs-preprocessor">.setFailureDrawableId</span>(R<span class="hljs-preprocessor">.drawable</span><span class="hljs-preprocessor">.ic</span>_launcher)//设置使用缓存<span class="hljs-preprocessor">.setUseMemCache</span>(true)//设置显示圆形图片<span class="hljs-preprocessor">.setCircular</span>(true)//设置支持gif<span class="hljs-preprocessor">.setIgnoreGif</span>(false)<span class="hljs-preprocessor">.build</span>()<span class="hljs-comment">;</span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul>

其余的一些配置请参考源码

如果需要对加载的图片进行操作的话,可以使用:

<code class="hljs r has-numbering">x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {<span class="hljs-keyword">...</span>});</code><ul style="" class="pre-numbering"><li>1</li></ul><ul style="" class="pre-numbering"><li>1</li></ul>

通过返回的Drawable对象进行图片的处理,满足项目的个性化的要求.

说了这么多,我想大家至少会对XUtils3有了一个基本的了解,由于XUtils3的数据库的用法比较多,本篇文章不会去涉及,下一篇文章我会为大家详细讲解XUtils3的数据库模块。大家赶紧现在动手操作一下吧!本文涉及到的所有实例都会在下面的demo中有涉及到,请自行参考。

XUtils3.zip

0 0
原创粉丝点击