离线下载缓存图片
来源:互联网 发布:淘宝红人狼宝扒皮 编辑:程序博客网 时间:2024/04/27 16:06
本博客主要用来说明,在安卓app开发过程中,离线下载的图片如何缓存,其主要是运用imageloader来缓存图片
主要代码如下
主acivity里面的代码
package com.example.load___;import java.util.ArrayList;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.assist.FailReason;import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.view.View;import android.widget.ListView;public class MainActivity extends Activity { /** * 模拟接口里的图片地址 */ String[] picPath1 = new String[] { "https://gw.alicdn.com/tps/TB133PFKpXXXXbIXFXXXXXXXXXX-520-280.jpg", "https://aecpm.alicdn.com/simba/img/TB1yWIyKXXXXXbwXXXXSutbFXXX.jpg", "https://img.alicdn.com/tps/TB1E_kqKpXXXXcGXXXXXXXXXXXX-520-280.jpg", "https://aecpm.alicdn.com/simba/img/TB1pKE2JVXXXXbpaXXXSutbFXXX.jpg", "https://img.alicdn.com/bao/uploaded/i1/TB1r5K.KpXXXXcyXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg", "https://img.alicdn.com/imgextra/i2/1062618758/TB25Q60qpXXXXXVXpXXXXXXXXXX_!!1062618758.jpg_60x60q90.jpg", "https://img.alicdn.com/imgextra/i2/1062618758/TB2sdDMqFXXXXcsXXXXXXXXXXXX_!!1062618758.jpg", "https://gw.alicdn.com/bao/uploaded/i7/63418204/TB2DHUkpVXXXXbsXXXXXXXXXXXX_!!63418204.jpg_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i8/380101244/TB2V3jSpVXXXXcKXXXXXXXXXXXX_!!380101244.jpg_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i4/43084091/TB2Oy7RoFXXXXcyXXXXXXXXXXXX_!!43084091.jpg_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i6/TB1enEaJVXXXXbhXFXXXXXXXXXX_!!0-item_pic.jpg_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i7/TB1YOmRJFXXXXc.aXXXYXGcGpXX_M2.SS2_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i0/TB1S9dLJFXXXXXVaXXXYXGcGpXX_M2.SS2_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i6/2115168470/TB2LGwsnFXXXXXKXFXXXXXXXXXX_!!2115168470.jpg_280x380xz.jpg", "https://gw.alicdn.com/bao/uploaded/i7/140750234460572075/TB1YQBMKpXXXXXLXXXXXXXXXXXX_!!0-pix.jpg_280x380xz.jpg", }; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); // 如果有网用网络数据,如果没有就用数据库的数据 if (isNetWorkAvailable(this)) { } else { listView.setAdapter(new Myadapter(this,picPath1)); } } // 离线下载跳转按钮 public void offline(View v) { startActivityForResult(new Intent(this, TypeActivity.class), 9); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); // 得到要离线下载的数据类型 ArrayList<String> list = data.getStringArrayListExtra("type"); // 1.得到每个类型对应的接口地址 // 2.通过请求每个接口地址,得到json信息 // 3.把json里图片的地址拿到,并请求 // 4.将json信息存到数据库 // //////////////////////////////////// for (String string : picPath1) { ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.loadImage(string, new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { } @Override public void onLoadingCancelled(String arg0, View arg1) { } }); } } /** * 判断网络是否可用 * * @param context * @return */ public boolean isNetWorkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (manager != null) { NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { return true; } else { return false; } } else { return false; } }}下面这个是application,主要是对imageloader设置一个内存缓存策略
package com.example.load___;
/**
*
*/
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.MemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.FIFOLimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LargestLimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LimitedAgeMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;
import com.nostra13.universalimageloader.core.download.ImageDownloader;
import android.app.Application;
import android.os.Environment;
import android.widget.Toast;
/**
* @author WJL
*
*/
public class MyApplication extends Application {
private int maxMemory;
@Overridepublic void onCreate() { super.onCreate(); System.out.println("MyApplication"); maxMemory = ((int) Runtime.getRuntime().maxMemory()) / 1024 / 1024; System.out.println("最大内存:"+maxMemory); Toast.makeText(this, " "+maxMemory, 0).show(); //初始ImageLoader initImageLoader();}/** * //初始ImageLoader */@SuppressWarnings("deprecation")private void initImageLoader() { //得到ImageLoader实例 ImageLoader imageLoader=ImageLoader.getInstance(); //得到ImageLoader配置的建筑者对象 ImageLoaderConfiguration.Builder builder=new Builder(this); //设置磁盘(sd卡)缓存的大小限制
// builder.diskCacheSize(maxCacheSize);
try {
// imageDownloader
//设置磁盘(sd卡)缓存策略,参数一:缓存文件的路径,参数二:文件名的命名方法,有MD5,HashCode,参数三:缓存的最大内存
builder.discCache(new LruDiskCache(new File(Environment.getExternalStorageDirectory().getPath()+”/aaa”), new Md5FileNameGenerator(), 2*1024*1204));
//设置磁盘(sd卡)缓存策略,限制缓存时间;参数一:缓存文件的路径,参数二:缓存文件的存活时间,系统当前时间-文件的最新修改时间 > maxAge
// builder.discCache(new LimitedAgeDiskCache(cacheDir, maxAge) );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置内存缓存的大小限制,默认是最大内存的1/8 builder.memoryCacheSize(maxMemory/8); //设置内存缓存策略 根据先进先出的原则上删除多余对象 LinkedList 参数一:设置的缓存内存大小
// builder.memoryCache(new FIFOLimitedMemoryCache(sizeLimit));
//设置内存缓存策略 先删除占内存最大的图片 HashMap 参数一:设置的缓存内存大小
// builder.memoryCache(new LargestLimitedMemoryCache(sizeLimit));
// 设置内存缓存策略 Lru算法 LinkedHashMap 最大的缓存大小
// builder.memoryCache(new LruMemoryCache(maxSize))
//设置内存缓存策略 最少被用到的对象会被删除 HashMap 参数一:设置的缓存内存大小
// builder.memoryCache(new UsingFreqLimitedMemoryCache(sizeLimit))
//设置内存缓存策略 最早被添加的对象会被删除 HashMap 参数一:MemoryCache对象 参数二:缓存失效的最大时间
// builder.memoryCache(new LimitedAgeMemoryCache(cache, maxAge));
//初始化imageLoader配置 imageLoader.init(builder.build());/* 使用默认的缓存策略 ImageLoader imageLoader2=ImageLoader.getInstance(); ImageLoaderConfiguration.Builder configuration=new ImageLoaderConfiguration.Builder(this); imageLoader2.init(configuration.build()); */}
}
下面是适配器里面的方法
package com.example.load___;import com.nostra13.universalimageloader.core.ImageLoader;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;public class Myadapter extends BaseAdapter { private MainActivity mainActivity; private String[] picPath1; public Myadapter(MainActivity mainActivity, String[] picPath1) { this.mainActivity = mainActivity; // TODO Auto-generated constructor stub this.picPath1 = picPath1; } @Override public int getCount() { // TODO Auto-generated method stub return picPath1.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView=View.inflate(mainActivity, R.layout.item, null); ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView); ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.displayImage(picPath1[position], imageView); return convertView; }}下面这个是跳转到类型界面
package com.example.load___;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class TypeActivity extends Activity {
String[] arr = new String[] {
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",};private ListView listView;ArrayList<String> list = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_type); listView = (ListView) findViewById(R.id.listView); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr)); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (!list.contains(arr[position])) { list.add(arr[position]); } } });}public void load(View v) { if (isNetWorkAvailable(this)) { Intent intent = new Intent(); intent.putStringArrayListExtra("type", list); setResult(99, intent); finish(); } else { Toast.makeText(this, " 网络不可用 ", 1).show(); }}/** * 判断网络是否可用 * * @param context * @return */public boolean isNetWorkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (manager != null) { NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { return true; } else { return false; } } else { return false; }}
}
以上就是一个简单的离线下载缓存图片功能!希望可以给大家一点帮助!
- 离线下载缓存图片
- 下载图片缓存方法
- android--ImageLoaderl离线缓存图片ImageLoaderConfiguration详解
- 巧用NSURLCache离线下载网页中的图片
- GCD下载保存图片 缓存
- Volley缓存方式下载图片
- android 下载图片并缓存
- 图片的缓存与下载
- ImageLoader_下载图片并缓存
- 离线缓存
- 离线缓存
- 离线缓存
- 异步下载图片和图片缓存
- 异步下载图片和图片缓存
- 异步下载图片和图片缓存
- 离线下载
- 离线下载
- 离线下载
- LeetCode-难题集之Linked List Random Node
- iOS开发系列文章收集
- 高德地图在ScrollView中滑动过程中边缘黑框的解决方案
- 自己写bootloader笔记10----改进(提高u-boot启动速度)
- XlistView下拉刷新,上拉加载
- 离线下载缓存图片
- Tensorflow 合并通道及加载子模型
- 08css文本常见样式
- Parajumpers Jacke she's your younger
- xib中 UIScrollView 设置contentSize 问题
- 好玩的逻辑推理题
- 大数据IMF传奇行动绝密课程第41课:Checkpoint彻底解密
- 核桃
- Javascript函数