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

时间: 2024-08-03 13:11:02

XUtils3框架的基本用法(一)的相关文章

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

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

【进展】XUtils3框架的使用

刚刚SLP迎来了一个飞跃——成功地使用XUtils3框架从LL资源网站上拉取LIVE相关信息并显示成列表. 效果如下:

线程框架Executor的用法举例

java5线程框架Executor的用法举例 Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务.这个框架主要由三个接口和其相应的具体类组成.Executor. ExecutorService 和 ScheduledExecutorService . 1. Executor 接口:是用来执行 Runnable 任务的:它只定义一个方法- execute(Runnable command):执行 Ruannable 类型

【Scrapy】Scrapy爬虫框架的基本用法

Scrapy爬虫框架的基本用法 Scrapy爬虫框架是一个好东西,可以十分简单快速爬取网站,特别适合那些不分离前后端的,数据直接生成在html文件内的网站.本文以爬取 杭电OJ http://acm.hdu.edu.cn 的题目ID和标题为例,做一个基本用法的记录 可参考 https://www.jianshu.com/p/7dee0837b3d2 安装Scrapy 使用pip安装 pip install scrapy 代码编写 建立项目 myspider scrapy startproject

Ajax框架---dwr的用法

通常使用Ajax时用的都是jQuery框架,现在公司的框架里用的都是dwr.我觉得dwr和jQuery中的ajax用法差不多,看起来也很像. 一.简介 百度百科上对dwr的描述: DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码(客户端代码)一样:但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些

Android 图片裁切框架 uCrop 的用法

1 uCrop简介 最近项目中用到了图片裁剪功能,于是百度了一下,发现了uCrop这个框架,这个框架的星星数很多,就决定使用这个框架 uCrop的Github地址:https://github.com/Yalantis/uCrop uCrop的特点: 裁剪框不动,图片动 图片可以旋转,缩放 支持各种比例裁剪框 uCrop的效果图(来自其Github): 2 集成uCrop (1) uCrop集成方法: compile 'com.yalantis:ucrop:1.4.1' (2) 修改当前项目的b

Android ORMLite 框架的入门用法

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39121377 大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介绍ORMLite的入门用法~ 1.下载 ORMLite Jar 首先去ORMLite官网下载jar包,对于Android为:ormlite-android-4.48.

Xutils3框架使用

目前Android开发很火的一个框架Xutils框架.它有四个模块:1.ViewUtils.2.HttpUtils.3.DbUtils.4.BitmapUtils. 记得是去年的差不多这个时候,我的大学老师张老师介绍我去学习Xutils框架,当时项目有很多对数据库的操作,所以刚学习Xutils的时候,首先着重学习对DbUtils模块的使用,感受到了他的好用之处.接下来为大家介绍一下Xutils框架的基本使用. 使用Xutils框架需要下载Xutils的jar包.(网上很好找,我使用的是xutil

ios关于数据库第三方框架FMDB----基本用法

概述 1. iOS开发中对数据进行本地缓存可谓家常便饭,小数据我们用plist文件或者归档缓存即可,即简单又方便.但对于一些列表一样的数据(数据量比较大)就要用到数据库了. 2. 关于数据库,移动开发中肯定首选sqlite3.这是一款轻微型的嵌入式数据库,通过sql语句进行“增删改查”等数据操作.只是sqlite,里面公布的api都是一些纯c语言的代码,用起来繁琐不堪,极为痛苦. 3. 而FMDB这个框架,就是对sqlite用oc语法进行了一层封装,我们到时使用数据库时,就可以直接用面向对象的方