您的位置:首页 > 其它

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

2016-06-14 11:04 393 查看
本文为作者原创,转载请指明出处:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: