zoukankan      html  css  js  c++  java
  • cathome 猫家 开发日记- 第三方库, http 请求与json.以及图片缓存

    http  概述。

    1.http请求,一般采用异步。所以必须是新线程。新线程获得数据一般是要修改界面。所以新线程一般是获得数据就结束,向主线程插入任务,让主线程处理。

    2.http一般含有get和post。

    3.所以可以使用方便一点的第三方库。最好是获得数据后。已处理转到主线程的步骤,  最耗时的网络操作在新线程处理。其他操作全部在主线程处理。基本没有什么问题。满足90%的库就是好库。10%需要特殊处理耗时操作。自行开新线程就可以。

    4.所以,使用地三方库。自己稍微封装下。就ok。、json。使用alibaba 的fastjson.

    5.异步,天生 需要委托 。 看下流程。

    json库概述

    1.使用alibaba 的fastjson.

    主要是简洁,如

    String jsonValue=LSJsonHelper.GetFirstValue(abc);
    List<Comment> ret=JSON.parseArray(jsonValue,Comment.class );

    图片缓存概述
    1.图片感觉就没有必要缓存到内存了。文件和图片,稍大的感觉都没有必要放入到内存。放到卡中就好了。 常用的特殊除外。内存放些常用数据比较好。
    2,使用了universalimageloader 这个库。
    3.使用步骤为
    3.1配置imageloader ,感觉是基础配置,这个时候缓存并不会自动起作用好像。
    3.2p配置 displayoption 。好像是配置了这个之后,当对某张图片插入这个参数的时候。缓存才会起作用。

    1.使用第三方库后,自己的封装类里面: handle.OnSuccess(body); <已经在主线程里面了>

    2. 调用类库的通用类:  mHttpHelper.HttpPost(GlobalVariable.ws_comment_get, tt,handle);

    3.最终调用代码:dalCatDetail.Add_Comment(comment, cid, uid, nickname, new LSHttpRequestHelper.OnSuccessHandle()

    自己封装类

    package com.utils.IO;
    
    import com.loopj.android.http.AsyncHttpClient;
    import com.loopj.android.http.AsyncHttpResponseHandler;
    import com.loopj.android.http.RequestParams;
    
    import java.nio.charset.StandardCharsets;
    import java.util.Map;
    
    import cz.msebera.android.httpclient.Header;
    
    public class LSHttpRequestHelper
    {
        AsyncHttpClient httpClient = new AsyncHttpClient();
    
        public interface OnSuccessHandle
        {
            public void OnSuccess(String abc);
        }
    
        public void HttpGet(String url, final OnSuccessHandle handle)
        {
            httpClient.get(url, new AsyncHttpResponseHandler()
            {
                @Override
                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)
                {
                    if(statusCode==200)
                    {
                        String body = new java.lang.String(responseBody);//????2nd:"utf-8"
                        handle.OnSuccess(body);
                    }
                }
    
                @Override
                public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error)
                {
    
                }
            });
        }
    
        public void HttpPost(String url, Map<String, String> params,final OnSuccessHandle handle)
        {
            RequestParams pa=new RequestParams(params);
            httpClient.post(url, pa, new AsyncHttpResponseHandler()
            {
                @Override
                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)
                {
                    if(statusCode==200)
                    {
                        String body = new java.lang.String(responseBody);//????2nd:"utf-8"
                        handle.OnSuccess(body);
                    }
                }
    
                @Override
                public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error)
                {
    
                }
            });
        }
    }

    数据访问类

    public void  GetComments(int catid,LSHttpRequestHelper.OnSuccessHandle handle)
        {
            Map<String,String> tt=new HashMap<>();
            tt.put("catid", catid+"");
            mHttpHelper.HttpPost(GlobalVariable.ws_comment_get, tt,handle);
        }

    调用

    private void SetupListview()
        {
            dalCatDetail.GetComments(mbase.Base_ID, new LSHttpRequestHelper.OnSuccessHandle()
            {
                @Override
                public void OnSuccess(String abc)
                {
                    String jsonValue=LSJsonHelper.GetFirstValue(abc);
                    List<Comment> ret=JSON.parseArray(jsonValue,Comment.class );
                    madapter=new CommentAdapter(getContext(), ret);
                    mlv.setAdapter(madapter);
                }
            });
        }



    图片库的使用。

    配置

     //初始化第三方库-图片库
            File cacheDir = StorageUtils.getCacheDirectory(this);
            //ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);
            ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
            builder.threadPoolSize(3); // 线程池大小
            builder.threadPriority(Thread.NORM_PRIORITY - 2); // 设置线程优先级
            builder.denyCacheImageMultipleSizesInMemory(); // 不允许在内存中缓存同一张图片的多个尺寸
            builder.tasksProcessingOrder(QueueProcessingType.LIFO); // 设置处理队列的类型,包括LIFO, FIFO
            builder.memoryCache(new LruMemoryCache(3 * 1024 * 1024)); // 内存缓存策略
            builder.memoryCacheSize(5 * 1024 * 1024);  // 内存缓存大小
            builder.memoryCacheExtraOptions(480, 800); // 内存缓存中每个图片的最大宽高
            builder.memoryCacheSizePercentage(50); // 内存缓存占总内存的百分比
            builder.diskCache(new UnlimitedDiskCache(cacheDir)); // 设置磁盘缓存策略
            builder.diskCacheSize(50 * 1024 * 1024); // 设置磁盘缓存的大小
            builder.diskCacheFileCount(50); // 磁盘缓存文件数量
            builder.diskCacheFileNameGenerator(new Md5FileNameGenerator()); // 磁盘缓存时图片名称加密方式
            builder.imageDownloader(new BaseImageDownloader(this)); // 图片下载器
            builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());
            builder.writeDebugLogs(); // 打印日志
    
            ImageLoader.getInstance().init(builder.build());
    
            DisplayImageOptions options;
            GlobalVariable.picconfig = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.pic1) //设置图片在下载期间显示的图片
            .showImageForEmptyUri(R.drawable.pic1)//设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.pic1)  //设置图片加载/解码过程中错误时候显示的图片
            //.cacheInMemory(true)//设置下载的图片是否缓存在内存中
            //.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
            .cacheOnDisk(true)
            .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
            .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
            //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
            //设置图片加入缓存前,对bitmap进行设置
            //.preProcessor(BitmapProcessor preProcessor)
            .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
            //.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
            .build();//构建完成

    最简单的使用,一条语句,带缓存

    ImageLoader.getInstance().displayImage(GlobalVariable.ws_pic+"head/1.png", ivhead,GlobalVariable.picconfig);
  • 相关阅读:
    论工作动力的来源是什么?答案是来自于实现自己的梦想
    向梦想者致敬
    内置函数,递归函数,模块与包,开发目录规范
    迭代器,生成器
    闭包函数,装饰器,语法糖
    函数对象,名称空间及查找,作用域
    函数调用与参数
    字符编码
    文件处理
    python 11.5数据类型及常用方法
  • 原文地址:https://www.cnblogs.com/lsfv/p/9907427.html
Copyright © 2011-2022 走看看