• XUtils3框架的基本用法(一)


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

    今天给大家带来XUtils3的基本介绍。本文章的案例都是基于XUtils3的API语法进行的演示。相信大家对这个框架也都了解过,以下简介下XUtils3的一些基本知识。
    XUtils3一共同拥有4大功能:注解模块,网络模块。图片载入模块。数据库模块。
    使用XUtils仅仅须要在libs目录里面增加一个jar包。假设对server返回的数据进行封装的话,还须要导入一个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_getbutton时。弹出了“发送get请求”的效果。到这里,大家算是对XUtils的注解有个一个主要的认识,以下我在强调一点的是,@Event这个注解默认情况下type属性为View.OnClickListener.class.假设你想实现其余点击事件效果,仅仅须要把type值进行改动就可以。
    另外须要注意的一点是button的点击事件必须用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().post(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 {
        //检查server返回的响应头信息
        @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请求(server以xml格式返回)

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

    图片载入模块

    使用方法:

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

    Xutils3的api还是比較简单的,相信大家都能够看懂。第一个參数传入一个View。第二个參数传入一个图片的网络地址,第三个參数通常是载入图片的配置。
    以下看一下ImageOptions这个类吧:

    ImageOptions options=new ImageOptions.Builder()
    //设置载入过程中的图片
    .setLoadingDrawableId(R.drawable.ic_launcher)
    //设置载入失败后的图片
    .setFailureDrawableId(R.drawable.ic_launcher)
    //设置使用缓存
    .setUseMemCache(true)
    //设置显示圆形图片
    .setCircular(true)
    //设置支持gif
    .setIgnoreGif(false)
    .build();

    其余的一些配置请參考源代码

    假设须要对载入的图片进行操作的话,能够使用:

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

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

    说了这么多,我想大家至少会对XUtils3有了一个主要的了解,因为XUtils3的数据库的使用方法比較多,本篇文章不会去涉及,下一篇文章我会为大家具体解说XUtils3的数据库模块。大家赶紧如今动手操作一下吧!本文涉及到的全部实例都会在以下的demo中有涉及到。请自行參考。

    XUtils3.zip

  • 相关阅读:
    使用Go语言两三事
    Ubuntu安装和配置redis
    samba 问题Windows能看到文件夹但是不能打开
    centos---无线上网的电脑所安装的虚拟机网络设置
    centos克隆,网卡启动失败
    redis安装及基础操作(1)
    hadoop2.6---windows下开发环境搭建
    hadoop2.6---常用命令
    虚拟机centos6.5 --hadoop2.6集群环境搭建
    虚拟机centos6.5 --开放端口
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7061871.html
Copyright © 2020-2023  润新知