源自:4-3 滚动状态判断与处理

数组越界异常 求解决!!!

package com.example.imooc;

import java.io.BufferedInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashSet;

import java.util.Set;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.os.Handler;

import android.os.Message;

import android.support.v4.util.LruCache;

import android.widget.ImageView;

import android.widget.ListView;

public class ImageLoader {

private ImageView mImageView;

private String murl;

private LruCache mCaches;

private ListView mListView;

private Set mTask;

public ImageLoader(ListView listView) {

mListView=listView;

mTask=new HashSet();

int maxMemory = (int) Runtime.getRuntime().maxMemory();

int cacheSize = maxMemory / 4;

mCaches = new LruCache(cacheSize) {

@Override

protected int sizeOf(String key, Bitmap value) {

// 在每次存入缓存的时候调用

return value.getByteCount();

}

};

}

// 添加到缓存,put()

public void addBitmapToCache(String url, Bitmap bitmap) {

if (getBitmapFromCache(url) == null) {

mCaches.put(url, bitmap);

}

}

// 缓存中提取数据 get()

public Bitmap getBitmapFromCache(String url) {

return mCaches.get(url);

}

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

super.handleMessage(msg);

if (mImageView.getTag().equals(murl)) {

mImageView.setImageBitmap((Bitmap) msg.obj);

}

}

};

public void showImageByThread(ImageView imageView, final String url) {

mImageView = imageView;

murl = url;

new Thread() {

@Override

public void run() {

super.run();

Bitmap bitmap = getBitmapFromURL(url);

Message message = Message.obtain();

message.obj = bitmap;

mHandler.sendMessage(message);

}

}.start();

}

public Bitmap getBitmapFromURL(String urlString) {

Bitmap bitmap;

InputStream is = null;

try {

URL url = new URL(urlString);

HttpURLConnection connection = (HttpURLConnection) url

.openConnection();

is = new BufferedInputStream(connection.getInputStream());

bitmap = BitmapFactory.decodeStream(is);

connection.disconnect();

// 这个忘记return bitmap后 message无法打包bitmap 导致程序崩溃!!。

return bitmap;

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

public void showImageByAsyncTask(ImageView imageView, String url) {

// 从缓存中提取图片

Bitmap bitmap = getBitmapFromCache(url);

// 如果没有,就到网络中下载。如果有,直接提取。

if (bitmap == null) {

imageView.setImageResource(R.drawable.ic_launcher);

} else {

imageView.setImageBitmap(bitmap);

}

}

public void cancelAllTasks(){

if (mTask!=null) {

for (MyAsyncTask task: mTask) {

task.cancel(false);

}

}

}

public void loadImages(int start,int end){

for (int i = start; i < end; i++) {

String url =MyAdapter.URLS[i];

// 从缓存中提取图片

Bitmap bitmap = getBitmapFromCache(url);

// 如果没有,就到网络中下载。如果有,直接提取。

if (bitmap == null) {

MyAsyncTask task=new MyAsyncTask(url);

task.execute();

mTask.add(task);

} else {

ImageView imageView=(ImageView) mListView.findViewWithTag(url);

imageView.setImageBitmap(bitmap);

}

}

}

public class MyAsyncTask extends AsyncTask {

//private ImageView mImageView;

private String murl;

public MyAsyncTask(String url) {

//mImageView = imageView;

murl = url;

}

@Override

protected Bitmap doInBackground(String... arg0) {

String url = arg0[0];

// 获取图片,将图片保存到cache;

Bitmap bitmap = getBitmapFromURL(url);

if (bitmap !=null) {

// 将不在缓存的图片加入缓存;

addBitmapToCache(url, bitmap);

}

return bitmap;

}

@Override

protected void onPostExecute(Bitmap result) {

super.onPostExecute(result);

ImageView imageView=(ImageView) mListView.findViewWithTag(murl);

if (imageView!=null && result!=null) {

imageView.setImageBitmap(result);

}

}

}

}

提问者:MonKing__

2015-12-02 15:34

java 数组越界异常_数组越界异常 求解决!!!相关推荐

  1. java中int边界值_数组中重复的数字2019.12.06

    记录一下,记录一下,记录一下,因为我的记忆好像只有10s 题目描述: 在一个长度为n的数组里面,所有元素的范围是[0,n-1],数组中可能存在某些数字是重复的,请判断是否有重复元素,如果有,找出来. ...

  2. java 数组的方法_数组常用方法

    [TOC] # 定义 ~~~ //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = new Array[Int](8) //直接打印定长数组,内容为数组的hashcode值 pri ...

  3. java中数组的含义_数组

    数组(Array)是有序的元素序列.[1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数 ...

  4. java数组线性查找_数组查找: 线性查找与二分查找

    前言 从数组中查找你需要的数据,是一个很常见的需求,那么当你查找所需数据时,用什么方法查找速度最快? 本文将通过图文形式,详细讲解线性查找与二分查找,并用JavaScript将其实现,欢迎各位感兴趣的 ...

  5. classcastexception异常_内部类、异常以及 LeetCode 每日一题

    1 内部类 内部类的作用: 内部类提供了更好的封装,可以把内部类隐藏于外部类之内,不允许同一个包中的其他类访问该类.(例如给"牛"这个类组合一个"牛腿",则可以 ...

  6. classnotfoundexception是什么异常_大佬说“异常信息”是优秀程序员编写代码的宝贵财富,这是真的吗...

    嗯嗯.......大佬给我看看我的代码呢,到底错哪里了?大佬走过来,一波骚操作,安排得巴巴适适的.走时撂下一句:哥仔建议你看一下控制台,那么简单的问题,记住异常信息就是你宝贵的财富. try 用来指定 ...

  7. 一维数组和二维数组的区别_数组指针和指针数组的区别

    数组指针和指针数组的区别 - hongcha_717 - 博客园​www.cnblogs.com 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整 ...

  8. 二维数组各行求和_数组入门 | 数组的维度和尺寸

    有点类似于数学中的矩阵 数组 具有行.列及尺寸的特征,常量数组中使用分号或逗号分隔符来辨识行列,而区域数组的行列结构则与其引用的单元格区域保持一致. 二维数组 数组的尺寸同时由行列两个元素来确定,M行 ...

  9. dataframe数组做元素_数组 array 矩阵 list 数据框 dataframe

    #R语言备忘录三# #数组array和矩阵matrix.列表list.数据框dataframe #数组 #数组的重要属性就是dim,维数 #得到4*5的矩阵 z dim(z) z #构建数组 x #三 ...

最新文章

  1. [转]一篇很喜欢的知乎美文
  2. 【已解决】applicationContext.xml cannot be opened because it does not exist
  3. JAVA入门级教学之(方法-2)
  4. php设置url,php 设置 url
  5. 软件设计师 - 数据流图
  6. sql limit不接具体数字_SQL汇总函数和分组函数
  7. 大数据可视化技术价值体现在哪方面
  8. Ajax学习笔记(1)
  9. pdf书籍笔记助手,BookxNote使用记录
  10. 对应的服务器证书无效。控制台输入 showRequestInfo() 可以获取更详细信息
  11. Presenting view controllers on detached view controllers is discouraged
  12. 义哥征途登录显示服务器维护中,征途单机版
  13. Centos6、Centos7、Centos8关闭防火墙
  14. 来客码到底是干什么的?
  15. STL:: allocator之deallocate destory的区别与联系
  16. 【PyTorch】模型 FPS 测试 Benchmark(参考 MMDetection 实现)
  17. 在后台定时连续截屏的工具 —— 定时执行专家
  18. 一个域名价值怎么看 域名估值的标准是什么
  19. 安装win7提示无法配置到计算机,安装win7出现“无法将windows配置为在此计算机的硬件上运行”怎么办...
  20. ThinkPHP 开发XXXXX后台

热门文章

  1. Https的底层原理
  2. Navicat新建查询快捷键
  3. Oracle中分页查询语句
  4. Codeforces 900D Unusual Sequences:记忆化搜索
  5. 初学ssm框架的信息
  6. Xamarin开发Anroid应用介绍
  7. alias重启终端失效的问题
  8. 程序员必知8大排序3大查找(三)
  9. 用JavaScript获取URL中的参数值
  10. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)