ImageLoder缓存图片及ListView多条目加载
来源:互联网 发布:ui设计 笔记本 知乎 编辑:程序博客网 时间:2024/05/29 09:13
这里的话XListView和ImageLoder的适配我就不发了,我写一些实际代码,要是需要的话有时间我会补发的
首先需要在清单文件里写一下访问权限
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />< !--在application里添加继承Application类的类名-- > <application...android:name=".MyImageLoder".../>
这里写的就是清单文件name属性的类名
ImageLoder类
public class MyImageLoder extends Application { @Override public void onCreate() { super.onCreate(); //这些都是可以通过个人需要写的,要是需要全的话,大家可以百度 //缓存文件夹的路径 File file = StorageUtils.getOwnCacheDirectory(this, Environment.getDownloadCacheDirectory().getPath()); ImageLoaderConfiguration builder = new ImageLoaderConfiguration.Builder(this) .threadPoolSize(3)//线程池加载的数量 .memoryCache(new LruMemoryCache(2 * 1024 * 1024))//可以通过自己的内存缓存实现 .diskCache(new UnlimitedDiskCache(file))//可以自己定义路径 .diskCacheSize(50 * 1024 * 1024)//sd卡缓存的最大值 .diskCacheFileCount(100)//可以缓存文件的数量 .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .build();//开始创建 //设置缓存选项 ImageLoader.getInstance().init(builder); }}
写一个StreamTools 类用来获取到网络数据后,转换成字符串格式
装换类
public class StreamTools { public static String getString(InputStream inputStream){ try { //定义一个空的数组用来装我们取到的数据,最大是1024 byte[] bytes = new byte[1024]; //定义一个数组下标 int len=0; //通过ByteArrayOutputStream进行转换 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); //while循环一下 这里有个小知识点,如果数组下边是-1的话证明数组里已经没有数据了 while ((len=inputStream.read(bytes))!=-1){ //把我们while取到的数据写入ByteArrayOutputStream byteArrayOutputStream.write(bytes,0,len); } //返回一下 return byteArrayOutputStream.toString(); } catch (IOException e) { e.printStackTrace(); } return null; }}
然后是要在MainActivity的代码
MainActivity
public class MainActivity extends AppCompatActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //需要找到xml布局文件里面listview的id listView = (ListView) findViewById(R.id.listView); /** *自定义一个方法然后放入我们需要访问的路径文件路径 *这里我用的是聚合的网站,你们可以根据自己的需求写入相关网址 */ getMessage("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=秘制红烧肉"); } public void getMessage(String path){ //这里的话我用的异步加载 new AsyncTask<String,Void,String>(){ @Override protected String doInBackground(String... params) { try { //相当于获取网址 String param = params[0]; //相当于在浏览器地址栏中输入网络地址 URL url = new URL(param); //相当于你输入完网址和ihou,敲回车动作 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //设置请求方式 get 一定要大写 urlConnection.setRequestMethod("GET"); urlConnection.setReadTimeout(5000); urlConnection.setConnectTimeout(5000); int code = urlConnection.getResponseCode(); //服务器响应 200 请求成功 if (code==200){ InputStream inputStream = urlConnection.getInputStream(); String s = StreamTools.getString(inputStream); System.out.println("数据为:"+s); return s; } } catch (IOException e) { e.printStackTrace(); } return null; } //需要重写onPostExecute方法,然后可以在里边写入我们想更改的主线程 @Override protected void onPostExecute(String s) { super.onPostExecute(s); //判断死否为空 if (s==null){ return; } Gson gson = new Gson(); Bean bean = gson.fromJson(s, Bean.class); List<Bean.ResultBean.DataBean.StepsBean> steps = bean.getResult().getData().get(0).getSteps(); ListViewAdapter adapter = new ListViewAdapter(MainActivity.this,steps); listView.setAdapter(adapter); } }.execute(path);//把方法传到的路径放在这里 }}
适配器类
public class ListViewAdapter extends BaseAdapter { private Context context; private List<Bean.ResultBean.DataBean.StepsBean> list; private final int PAGE_ONE = 0; private final int PAGE_TWO = 1; private final DisplayImageOptions builder; public ListViewAdapter(Context context, List<Bean.ResultBean.DataBean.StepsBean> list) { this.context = context; this.list = list; builder = new DisplayImageOptions.Builder() .showImageOnFail(R.mipmap.ic_launcher) .showImageOnLoading(R.mipmap.ic_launcher) .cacheOnDisk(true) .cacheInMemory(true) .build(); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { if (position % 2 == 0) { return PAGE_ONE; } else { return PAGE_TWO; } } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); switch (type) { case PAGE_ONE: { ViewHolderOne viewHolderOne = null; if (convertView == null) { viewHolderOne = new ViewHolderOne(); convertView = View.inflate(context, R.layout.message_one, null); viewHolderOne.textView = (TextView) convertView.findViewById(R.id.textView_one); viewHolderOne.imageView = (ImageView) convertView.findViewById(R.id.imageView_one); convertView.setTag(viewHolderOne); } else { viewHolderOne = (ViewHolderOne) convertView.getTag(); } viewHolderOne.textView.setText(list.get(position).getStep()); ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderOne.imageView, builder); } break; case PAGE_TWO: { ViewHolderTwo viewHolderTwo = null; if (convertView == null) { viewHolderTwo = new ViewHolderTwo(); convertView = View.inflate(context, R.layout.message_two, null); viewHolderTwo.textView = (TextView) convertView.findViewById(R.id.textView_two); viewHolderTwo.imageView = (ImageView) convertView.findViewById(R.id.imageView_two); convertView.setTag(viewHolderTwo); } else { viewHolderTwo = (ViewHolderTwo) convertView.getTag(); } viewHolderTwo.textView.setText(list.get(position).getStep()); ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderTwo.imageView, builder); break; } } return convertView; }}class ViewHolderOne { TextView textView; ImageView imageView;}class ViewHolderTwo { TextView textView; ImageView imageView;}
Bean对象
public class Bean { private String resultcode; private String reason; private ResultBean result; private int error_code; public String getResultcode() { return resultcode; } public void setResultcode(String resultcode) { this.resultcode = resultcode; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public ResultBean getResult() { return result; } public void setResult(ResultBean result) { this.result = result; } public int getError_code() { return error_code; } public void setError_code(int error_code) { this.error_code = error_code; } public static class ResultBean { private String totalNum; private String pn; private String rn; private List<DataBean> data; public String getTotalNum() { return totalNum; } public void setTotalNum(String totalNum) { this.totalNum = totalNum; } public String getPn() { return pn; } public void setPn(String pn) { this.pn = pn; } public String getRn() { return rn; } public void setRn(String rn) { this.rn = rn; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String id; private String title; private String tags; private String imtro; private String ingredients; private String burden; private List<String> albums; private List<StepsBean> steps; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTags() { return tags; } public void setTags(String tags) { this.tags = tags; } public String getImtro() { return imtro; } public void setImtro(String imtro) { this.imtro = imtro; } public String getIngredients() { return ingredients; } public void setIngredients(String ingredients) { this.ingredients = ingredients; } public String getBurden() { return burden; } public void setBurden(String burden) { this.burden = burden; } public List<String> getAlbums() { return albums; } public void setAlbums(List<String> albums) { this.albums = albums; } public List<StepsBean> getSteps() { return steps; } public void setSteps(List<StepsBean> steps) { this.steps = steps; } public static class StepsBean { /** * img : http://img.juhe.cn/cookbook/s/1/45_0824e37faf00b71e.jpg * step : 1.将五花肉煮至断生状态 */ private String img; private String step; public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getStep() { return step; } public void setStep(String step) { this.step = step; } } } }}
0 0
- ImageLoder缓存图片及ListView多条目加载
- listview + imageloder多条目加载
- 多条目加载并用imageLoder加载图片
- listview多条目+图片缓存
- xListView多条目加载,判断有无图片及图片缓存到sd卡
- ListView多条目加载
- ListView 多条目加载
- listview多条目加载
- ListView多条目加载
- listview多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- listview多条目加载
- Listview多条目加载
- ListView多条目加载
- ListView多条目加载
- redis之常用数据类型操作
- HTML5复习 (10)
- POJ3041 Asteroids (最小顶点覆盖)
- 算法的时间复杂度和空间复杂度-总结
- robotframework 操作弹出div
- ImageLoder缓存图片及ListView多条目加载
- C++构造函数复用问题
- jquery事件
- javaScript基础语法01-上下2部分
- 愿你躲过所有oracle的坑
- "随时"退出程序
- 第1章 Java 多线程技能
- 算法-插入排序
- Spring Cloud构建微服务架构(二)服务消费者