您的位置:首页 > 其它

XUtils===XUtils3框架的基本使用方法

2016-03-30 09:17 447 查看
转载自:http://blog.csdn.net/a1002450926/article/details/50341173

今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示。相信大家对这个框架也都了解过,下面简单介绍下XUtils3的一些基本知识。

XUtils3一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。

使用XUtils只需要在libs文件夹里面加入一个jar包,如果对服务器返回的数据进行封装的话,还需要导入一个Gson的jar包。

[java] view plain copy

print?





<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

[java] view plain copy

print?





@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的注解:

[java] view plain copy

print?





@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的注解:

[java] view plain copy

print?





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,请求响应数据的解析类,还有一个就是一个请求成功的一个接口回调类。
代码如下:

[java] view plain copy

print?





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请求示例:

[java] view plain copy

print?





//本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请求

[java] view plain copy

print?





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.上传文件

[java] view plain copy

print?





/**

* 上传文件(支持多文件上传)

*/

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.下载文件

[java] view plain copy

print?





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.下载文件带进度条

[java] view plain copy

print?





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格式返回)

[java] view plain copy

print?





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);

}

});

}

图片加载模块

用法:

[java] view plain copy

print?





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这个类吧:

[java] view plain copy

print?





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中有涉及到,请自行参考。

源码下载地址:http://download.csdn.net/detail/a1002450926/9364413
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: