Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存。

来源:互联网 发布:vivo软件开发待遇 编辑:程序博客网 时间:2024/06/06 08:42

Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存

  1. ImagerLoader 相关使用及使用 我就不再啰嗦了 ,有需求的同学请直接飞过去http://blog.csdn.net/xiaanming/article/details/26810303
  2. 开始讲下阿里云图片 服务器使用及其 android 端的 oss-android-sdk-1.0.0.jar 以下贴出android 端管理类。
 public class OSSManager {      private static OSSManager instance;      private static OSSService ossService;      public static OSSManager getInstance() {       if (instance == null) {        instance = new OSSManager();       }       return instance;      }      public static OSSService getOssService() {       return ossService;      }      private static String TAG = OSSManager.class.getSimpleName();      public void Init(final Context context) {       if (ossService == null) {        ossService = OSSServiceProvider.getService();       }       ossService.setGlobalDefaultTokenGenerator(new TokenGenerator() {        @Override        public String generateToken(String httpMethod, String md5,          String type, String date, String ossHeaders, String resource) {         //demo的顺序 不要动它         String content = httpMethod + "\n" + md5 + "\n" + type + "\n"           + date + "\n" + ossHeaders + resource;          //以下代码是请求 密钥的 方法 必须实现(你换成你自己的http 请求 就好了),其他代码 直接照搬 demo就好了//       ClientServer server = new ClientServer(InterfaceMethod.get36(content));//       ResultBean resultBean = server.execute(context);//       if (resultBean != null&&resultBean.getErr()==0) {//       @SuppressWarnings("unchecked")//       Map<String,String> map = (Map<String, String>) resultBean.getResultParam(Map.class)//          .get(0);//       //map.get("data") 为服务器加密后的key 直接返回就好了//        return map.get("data");//       } else {          return "";//       }        }       });       ossService.setGlobalDefaultHostId("oss-cn-hangzhou.aliyuncs.com");       ossService.setCustomStandardTimeWithEpochSec(System.currentTimeMillis() / 1000);       ossService.setGlobalDefaultACL(AccessControlList.PRIVATE);       // 默认为private       ClientConfiguration conf = new ClientConfiguration();       conf.setConnectTimeout(15 * 1000); // 设置全局网络连接超时时间,默认30s       conf.setSocketTimeout(15 * 1000); // 设置全局socket超时时间,默认30s       conf.setMaxConnections(50); // 设置全局最大并发网络链接数, 默认50       ossService.setClientConfiguration(conf);      }     }

3.文件 上传

 public static OSSData postImageOSSdata(byte[] dataToUpload, String path) {       LogUtil.i("服务器地址", path);       OSSData data = getOssService().getOssData(getUploadBucket(), path);       data.setData(dataToUpload, "image/jpeg");       //上传监听       data.uploadInBackground(new SaveCallback() {        @Override        public void onSuccess(String objectKey) {         Log.d(TAG, "[onSuccess] - " + objectKey           + " upload success!");            }        @Override        public void onProgress(String objectKey, int byteCount,          int totalSize) {         Log.d(TAG, "[onProgress] - current upload " + objectKey           + " bytes: " + byteCount + " in total: "           + totalSize);        }        @Override        public void onFailure(String objectKey,          OSSException ossException) {        }       });       return data;      }      //文件储存服务器        private static OSSBucket getUploadBucket() {         OSSBucket bucket = getOssService().getOssBucket("你们租用服务器的名字");         return bucket;        }

4.获取图片

public static byte[] getImage(String path) {       byte[] bData = null;       OSSData data = getOssService().getOssData(getBucket(), path);       try {        bData = data.get();        Log.d(TAG, "finish getting data! length: " + bData.length);       } catch (OSSException e) {        HandleException.handleException(e);       }       return bData;      //图片处理 服务器 OSSBucket      private static OSSBucket getBucket() {       //这里 使用已经绑定域名的 图片服务器   应为OSS 规定只有绑定图片服务器域名了才可以 使用图片服务器功能(比如图片压缩)       OSSBucket bucket = getOssService().getOssBucket("你们绑定的 图片服务器域名");       bucket.setBucketHostId("你们绑定的 图片服务器域名");       return bucket;      }
  1. 上面已经把Oss 用到的设置及 主要的2个方法 已经 写出来了,现在我们来配合一下 Universal-Image-Loader。
File cacheDir = StorageUtils.getCacheDirectory(context);ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)        .memoryCacheExtraOptions(480, 800) // default = device screen dimensions        .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)        .taskExecutor(...)        .taskExecutorForCachedImages(...)        .threadPoolSize(3) // default        .threadPriority(Thread.NORM_PRIORITY - 1) // default        .tasksProcessingOrder(QueueProcessingType.FIFO) // default        .denyCacheImageMultipleSizesInMemory()        .memoryCache(new LruMemoryCache(2 * 1024 * 1024))        .memoryCacheSize(2 * 1024 * 1024)        .memoryCacheSizePercentage(13) // default        .diskCache(new UnlimitedDiscCache(cacheDir)) // default        .diskCacheSize(50 * 1024 * 1024)        .diskCacheFileCount(100)        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default        //这句是关键点  把这个配置到你的代码里。         .imageDownloader(new AliLoader(context))        .imageDecoder(new BaseImageDecoder()) // default        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default        .writeDebugLogs()        .build();

6.自定义 AliLoader 类。

public class AliLoader extends BaseImageDownloader {    private static boolean isgetToken = false;    // private String uri;    public AliLoader(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    @Override    protected InputStream getStreamFromOtherSource(String imageUri, Object extra)            throws IOException {        // TODO Auto-generated method stub             byte[] b = OSSManager.getImage(imageUri);            if (b != null) {                return new ByteArrayInputStream(b);            } else {                return super.getStreamFromOtherSource(imageUri, extra);            }    }

7.大家有疑问可以 留言 我每天都会登陆 当天解答问题,谢谢支持。

1 0