项目中xUtils和Handler的一点学习

来源:互联网 发布:网络新词 四个字2016 编辑:程序博客网 时间:2024/05/31 05:27

记录学习。
最近在做一个自己设计的小项目,刚好在学习xUtils,于是也用到了xUtils中的BitmapUtils和HttpUtils。
首先说下BitmapUtils
用Bitmap加载网络图片代码真的简单,它是自动缓存了。
简单的说下它的几个方法,很多用不到,就说几个常用的
一、是加载到ImageView:

//这是不写缓存路径,创建默认路径的bitmapUtils对象BitmapUtils bitmap=new BitmapUtils(this);//path代表缓存路径,创建设置了缓存路径的bitmapUtils对象BitmapUtils bitmap=new BitmapUtils(this,path);//加载的方法,imageUri表示你网络图片的路径bitmap.display(iv_lookphoto,imageUri);

二、是个给你缓存的图片改变名字
由于它缓存的时候是把uri编码后命名的,无法主动自己去找,所有我们可以自己设置命名。

bitmap.configDiskCacheFileNameGenerator(new DiskCacheFileNameGenerator() {            @Override            public String generate(String arg0) {            //name 你想命的名字规则                return name;            }        });

三、主要是用来判断是否缓存,通过uri得到位图的文件
他的方法是

public File getBitmapFileFromDiskCache(String uri) {          return globalConfig.getBitmapCache().getBitmapFileFromDiskCache(uri);      }  

我们怎么用它呢:

File file=bitmap.getBitmapFileFromDiskCache(imageUri)iffile!=null){//如果缓存了我们就可以不到网上去下载了,可以到缓存的地方去找,这就用到了,上面2个方法了。给它设置缓存的路径,其次给它设置命名规则,通过路径,和名字可以直接加载本地缓存到imageview上//执行的方法,path+"/"+name=缓存图片的本地路径bitmap.display(imageview,path+name);}else{//如果没有我们就去网上加载下来//执行的方法bitmap.display(imageview,imagerUri);}

在说下HttpUtils和Handler
HttpUtils和Handler的各自用户网上有很多我就不多说了。
我就说下我自己写的小工具,主要是方便自己代码复用,刚开始用HttpUtils时我发现我老是写重复的代码如:

RequestParams params=new RequestParams();DataPacket date=new DataPacket();String datejson= gson.toJson(date);params.addBodyParameter("DataPacket", datejson);HttpUtils http1 = new HttpUtils();http1.configCurrentHttpCacheExpiry(1000 * 10);http1.send(HttpMethod.POST, CommandURl, params, new RequestCallBack<String>() {@Overridepublic void onFailure(HttpException arg0, String arg1) {Toast.makeText(TrendsActivity.this, "服务器连接失败", 1).show();}public void onLoading(long total, long current, boolean isUploading) {if (isUploading) {System.out.println("upload1: " + current + "/" + total);} else {System.out.println("reply1: " + current + "/" + total);}}@Overridepublic void onSuccess(ResponseInfo<String> info) {String resultjson=info.result;DataPacket result=gson.fromJson(resultjson, DataPacket.class);}});

写了几个界面后,看代码恶心到了,于是我写了一个小小工具方便自己用HttpUtils;
首先在不同的界面写自己的handler:

private Handler mHandler=new Handler(){        public void  handleMssage(Message msg){            System.out.println("接受的消息"+msg.obj);                //在对数据处理            //在进行UI的变化        }    };

在自己重新写个XUtilsPost.class。写一个Post方法,把上下文,和handler传过去。

public class XUtilsPost {//自动实现异步处理    public static void doPost(final Context context,String url, RequestParams params, final Handler mHandler) {        HttpUtils http = new HttpUtils();        System.out.println("开始1");        http.configCurrentHttpCacheExpiry(1000 * 10);        http.send(HttpMethod.POST, url, params, new RequestCallBack<String>() {            @Override            public void onFailure(HttpException arg0, String arg1) {            Toast.makeText(context, "服务器连接失败", 1).show();            }            public void onLoading(long total, long current, boolean isUploading) {                if (isUploading) {                    System.out.println("upload: " + current + "/" + total);                } else {                    System.out.println("reply: " + current + "/" + total);                }            }            @Override            public void onSuccess(ResponseInfo<String> info) {                final String  info1=info.result;                System.out.println(info.result);                Thread th=new Thread(new Runnable() {                    public void run() {                        Message msg=new Message();                        msg.obj=info1;                        //通过handler把数据得到                        mHandler.sendMessage(msg);                    }                });                th.start();            }        });    }

由于我只用到了Post的方法,Get的方法就没写了,不过代码差不多是一样的。如果有什么地方错了,望提醒。菜鸟学习中。

0 0
原创粉丝点击