关键词:
转载自:http://blog.csdn.NET/a1002450926/article/details/50341173
今天给大家带来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中有涉及到,请自行参考。
源码下载地址:http://download.csdn.net/detail/a1002450926/9364413
xutils3框架的基本使用方法(代码片段)
转载自:http://blog.csdn.NET/a1002450926/article/details/50341173今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示。相信大家对这个框架也都了解过,下面简单介绍下XUtils3的一些基本知识。XUtils3一共... 查看详情
进展xutils3框架的使用
刚刚SLP迎来了一个飞跃——成功地使用XUtils3框架从LL资源网站上拉取LIVE相关信息并显示成列表。效果如下: 查看详情
xutils3框架使用
目前Android开发很火的一个框架Xutils框架。它有四个模块:1、ViewUtils。2、HttpUtils。3、DbUtils。4、BitmapUtils。记得是去年的差不多这个时候,我的大学老师张老师介绍我去学习Xutils框架,当时项目有很多对数据库的操作,所以刚学... 查看详情
xutils3基本使用(代码片段)
根目录下新建一个类继承application,调用xUtils3初始化方法publicclassAtguiguApplicationextendsApplication@OverridepublicvoidonCreate()super.onCreate();//xUtils3初始化x.Ext.init(this);//是否输出debug日志,开启debug会影响性能.x.Ext.setDeb 查看详情
xutils3的简单介绍
xUtils3的简介xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能。1.xUtils包含了很多实用的android工具;xUtils支持超大文件(超过2G)上传,更全面的http请求... 查看详情
xutils3的使用
1.添加依赖:compile‘org.xutils:xutils:3.5.0‘2.清单文件中注册初始化 初始化:x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG);//是否输出debug日志,开启debug会影响性能.//上线后参数设为fals 查看详情
xutils3
1.简介xUtils3是 xUtils的升级版,功能和性能都在提高,xUtils3主要有四大模块:注解模块,联网模块,图片加载模块,数据库模块;注解模块:用于在Activity 或者Fragment 中初始化布局文件,便于代码更加简洁;联网模块... 查看详情
使用xutils3中遇到的一些问题!!!!
1。当xml页面中有可见的,同时设置id的控件时,如果在Activity中没有使用注解进行反射该控件,app会crash,提示: Causedby:java.lang.NullPointerException:Attempttoinvokevirtualmethod‘voidandroid.support.v4.view.ViewPager.setAdapter(androi 查看详情
xutils3-dbutils
Github源码地址:https://github.com/wyouflf/xUtils3下面是源码中sample关于Dbutils的使用代码:importandroid.view.View;importandroid.widget.TextView;importorg.xutils.DbManager;importorg.xutils.common.util.KeyValue;importorg 查看详情
xutils3源码阅读之网络模块
关于xUtils3xUtils包含了很多实用的android工具.xUtils支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…xUtils最低兼容Android4.0(apilevel14).(Android2.3?)xUtils3变化较... 查看详情
xutils3文件上传下载getpost请求(代码片段)
@ContentView(R.layout.activity_xutils3_net)publicclassXUtils3NetActivityextendsActivity@ViewInject(R.id.tv_result)privateTextViewtextView;@ViewInject(R.id.progressbar)privateProgressBarprogressbar;@V 查看详情
手机影音第十三天,xutils3glide的使用获取网络图片;下拉上滑刷新;缓存网络资源
代码已经托管到码云上,感兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer本次的网络资源地址使用的是时光网的api接口,地址如下: http://api.m.mtime.cn/PageSubArea/TrailerList.api 查看详情
xutils--view模块分析(代码片段)
...Bitmap、Db、Http四个模块。本篇主要争对xUtils的2.6.14版本和xUtils3版本的View模块做个分析。View模块主要提供功能有View布局的绑定,事件的绑定。而在xUtils2.6.14中还提供资源绑定等功能。使用@ContentView(R.layout.activity_m 查看详情
android技术选型
网络请求一直再用Xutils框架,感觉挺不错的https://github.com/wyouflf/xUtils3底部状态栏https://github.com/yingLanNull/AlphaTabsIndicator本地图片选择https://github.com/tengyukun/imageselector提示性UItoast:Toasty: https://github. 查看详情
xutils--view模块分析(代码片段)
...Bitmap、Db、Http四个模块。本篇主要争对xUtils的2.6.14版本和xUtils3版本的View模块做个分析。View模块主要提供功能有View布局的绑定,事件的绑定。而在xUtils2.6.14中还提供资源绑定等功能。使用@ContentView(R.layout.activity_main)publiccl... 查看详情
xutils开源框架的使用(httputils支持多线程断点续传)
XUtils项目下载地址:https://github.com/wyouflf/xUtilsXUtils中包含的四大模块: 1、DbUtils模块 2、ViewUtils模块 3、HttpUtils模块:支持同步,异步方式的请求;支持大文件上传,上传大文件... 查看详情
xutils,okhttp,volley,retrofit对比
Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框架依赖非常的严重,一旦这... 查看详情
android注解入门并来自己写一个框架
介绍这里我带大家来学习一下注解并且用来写下一个模仿xUtils3中View框架此框架可以省略activity或者fragment的findViewById或者设置点击事件的烦恼我正参加2016CSDN博客之星的比赛希望您能投下宝贵的一票,点击进入投票我的github上的源... 查看详情