importjava.io.BufferedOutputStream;

  1. importjava.io.File;
  2. importjava.io.FileNotFoundException;
  3. importjava.io.FileOutputStream;
  4. importjava.io.IOException;
  5. importjava.io.InputStream;
  6. importjava.net.HttpURLConnection;
  7. importjava.net.MalformedURLException;
  8. importjava.net.URL;
  9. importjava.util.WeakHashMap;
  10. importorg.apache.http.HttpStatus;
  11. importcom.android.lalala.util.lalalaApplication;
  12. importandroid.graphics.Bitmap;
  13. importandroid.graphics.Bitmap.CompressFormat;
  14. importandroid.graphics.BitmapFactory;
  15. importandroid.os.Handler;
  16. importandroid.widget.ImageView;
  17. /**
  18. *图片下载与缓存思路是,先查看内存,后检查SDcard,没有的话联网进行下载。
  19. */
  20. publicclassImageLoader{
  21. privateImageViewimageView=null;
  22. privateStringurlPath="";
  23. privateWeakHashMap<String,Bitmap>picsHashMap=null;
  24. privateStringurlHashCode="";
  25. privateStringfilePath="";
  26. privateHandlerhandler=null;
  27. privateBitmaphandlerBitmap=null;
  28. /**
  29. *构造器
  30. *
  31. *@paramimageView
  32. *imageview对象
  33. *@paramurlPath
  34. *下载的url地址
  35. *@paramfilePath
  36. *缓存文件夹名称
  37. */
  38. publicImageLoader(ImageViewimageView,StringurlPath,StringfilePath){
  39. super();
  40. this.imageView=imageView;
  41. this.urlPath=urlPath;
  42. this.filePath=filePath;
  43. urlHashCode=String.valueOf(urlPath.hashCode());
  44. //从application中获取picHashMap对象
  45. picsHashMap=lalalaApplication.getInstance().getPicHashMap();
  46. handler=newHandler();
  47. newimageLoaderThread().start();
  48. }
  49. /**
  50. *图片下载线程
  51. */
  52. privateclassimageLoaderThreadextendsThread{
  53. @Override
  54. publicvoidrun(){
  55. super.run();
  56. if(readFromRAM()){
  57. return;
  58. }
  59. if(readFromSDcard()){
  60. return;
  61. }
  62. httpDownload();
  63. }
  64. }
  65. /**
  66. *开始下载
  67. */
  68. privatevoidhttpDownload(){
  69. try{
  70. URLurl=newURL(urlPath);
  71. HttpURLConnectionconnection=(HttpURLConnection)url
  72. .openConnection();
  73. connection.setConnectTimeout(10*1000);
  74. if(connection.getResponseCode()==HttpStatus.SC_OK){
  75. InputStreamis=connection.getInputStream();
  76. Bitmapbitmap=BitmapFactory.decodeStream(is);
  77. setBitmap(bitmap);
  78. lalalaApplication.getInstance().getPicHashMap()
  79. .put(urlHashCode,bitmap);
  80. saveToSDcard(bitmap);
  81. }
  82. }catch(MalformedURLExceptione){
  83. e.printStackTrace();
  84. }catch(IOExceptione){
  85. e.printStackTrace();
  86. }
  87. }
  88. /**
  89. *将bitmap保存至SD卡上
  90. *
  91. *@parambitmap
  92. *bitmap
  93. */
  94. privatevoidsaveToSDcard(Bitmapbitmap){
  95. try{
  96. StringfileName=filePath+"/"+urlHashCode+".JPG";
  97. Filefile=newFile(filePath);
  98. if(!file.exists()){
  99. file.mkdir();
  100. }
  101. BufferedOutputStreamoutputStream=newBufferedOutputStream(
  102. newFileOutputStream(newFile(fileName)));
  103. bitmap.compress(CompressFormat.JPEG,100,outputStream);
  104. }catch(FileNotFoundExceptione){
  105. e.printStackTrace();
  106. }
  107. }
  108. /**
  109. *从内存中读取bitmap图片数据
  110. *
  111. *@returntrue内存中有数据false内存中无数据
  112. */
  113. privatebooleanreadFromRAM(){
  114. if(picsHashMap.containsKey(urlHashCode)){
  115. Bitmapbitmap=picsHashMap.get(urlHashCode);
  116. setBitmap(bitmap);
  117. returntrue;
  118. }
  119. returnfalse;
  120. }
  121. /**
  122. *从SD卡读取图片
  123. *
  124. *@returntrueSDcard中有数据falseSDcard中无数据
  125. */
  126. privatebooleanreadFromSDcard(){
  127. StringfileName=filePath+"/"+urlHashCode+".JPG";
  128. Filefile=newFile(fileName);
  129. if(!file.exists()){
  130. returnfalse;
  131. }else{
  132. Bitmapbitmap=BitmapFactory.decodeFile(fileName);
  133. picsHashMap.put(urlHashCode,bitmap);
  134. setBitmap(bitmap);
  135. returntrue;
  136. }
  137. }
  138. /**
  139. *设置图片
  140. *
  141. *@parambitmap
  142. *图片
  143. */
  144. privatevoidsetBitmap(Bitmapbitmap){
  145. this.handlerBitmap=bitmap;
  146. handler.post(newRunnable(){
  147. @Override
  148. publicvoidrun(){
  149. imageView.setImageBitmap(handlerBitmap);
  150. }
  151. });
  152. }
  153. }

更多相关文章

  1. Android(安卓)tips2
  2. Android(安卓)数据和文件存储
  3. Android(安卓)数据和文件存储
  4. Android本地数据搜索实现
  5. Android(安卓)加载图片文件 函数
  6. Android(安卓)计时器 分:秒:毫秒 http://download.csdn.net/detail
  7. android中listview分批加载数据
  8. Android(安卓)导出数据库到Excel表格功能
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. eclipse 配置android
  2. android设置activity全屏 | 无标题
  3. android EditText使用指南
  4. Android(安卓)Camera使用小结
  5. 【30篇突击 android】源码统计四
  6. android操作系统默认的图片
  7. 第十周智能手机开发学习笔记
  8. android EditText 全面阐述
  9. Android(安卓)对话框【Dialog】去除白色
  10. Activity去除标题栏和状态栏