java 数组越界异常_数组越界异常 求解决!!!
源自: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 数组越界异常_数组越界异常 求解决!!!相关推荐
- java中int边界值_数组中重复的数字2019.12.06
记录一下,记录一下,记录一下,因为我的记忆好像只有10s 题目描述: 在一个长度为n的数组里面,所有元素的范围是[0,n-1],数组中可能存在某些数字是重复的,请判断是否有重复元素,如果有,找出来. ...
- java 数组的方法_数组常用方法
[TOC] # 定义 ~~~ //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = new Array[Int](8) //直接打印定长数组,内容为数组的hashcode值 pri ...
- java中数组的含义_数组
数组(Array)是有序的元素序列.[1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数 ...
- java数组线性查找_数组查找: 线性查找与二分查找
前言 从数组中查找你需要的数据,是一个很常见的需求,那么当你查找所需数据时,用什么方法查找速度最快? 本文将通过图文形式,详细讲解线性查找与二分查找,并用JavaScript将其实现,欢迎各位感兴趣的 ...
- classcastexception异常_内部类、异常以及 LeetCode 每日一题
1 内部类 内部类的作用: 内部类提供了更好的封装,可以把内部类隐藏于外部类之内,不允许同一个包中的其他类访问该类.(例如给"牛"这个类组合一个"牛腿",则可以 ...
- classnotfoundexception是什么异常_大佬说“异常信息”是优秀程序员编写代码的宝贵财富,这是真的吗...
嗯嗯.......大佬给我看看我的代码呢,到底错哪里了?大佬走过来,一波骚操作,安排得巴巴适适的.走时撂下一句:哥仔建议你看一下控制台,那么简单的问题,记住异常信息就是你宝贵的财富. try 用来指定 ...
- 一维数组和二维数组的区别_数组指针和指针数组的区别
数组指针和指针数组的区别 - hongcha_717 - 博客园www.cnblogs.com 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整 ...
- 二维数组各行求和_数组入门 | 数组的维度和尺寸
有点类似于数学中的矩阵 数组 具有行.列及尺寸的特征,常量数组中使用分号或逗号分隔符来辨识行列,而区域数组的行列结构则与其引用的单元格区域保持一致. 二维数组 数组的尺寸同时由行列两个元素来确定,M行 ...
- dataframe数组做元素_数组 array 矩阵 list 数据框 dataframe
#R语言备忘录三# #数组array和矩阵matrix.列表list.数据框dataframe #数组 #数组的重要属性就是dim,维数 #得到4*5的矩阵 z dim(z) z #构建数组 x #三 ...
最新文章
- [转]一篇很喜欢的知乎美文
- 【已解决】applicationContext.xml cannot be opened because it does not exist
- JAVA入门级教学之(方法-2)
- php设置url,php 设置 url
- 软件设计师 - 数据流图
- sql limit不接具体数字_SQL汇总函数和分组函数
- 大数据可视化技术价值体现在哪方面
- Ajax学习笔记(1)
- pdf书籍笔记助手,BookxNote使用记录
- 对应的服务器证书无效。控制台输入 showRequestInfo() 可以获取更详细信息
- Presenting view controllers on detached view controllers is discouraged
- 义哥征途登录显示服务器维护中,征途单机版
- Centos6、Centos7、Centos8关闭防火墙
- 来客码到底是干什么的?
- STL:: allocator之deallocate destory的区别与联系
- 【PyTorch】模型 FPS 测试 Benchmark(参考 MMDetection 实现)
- 在后台定时连续截屏的工具 —— 定时执行专家
- 一个域名价值怎么看 域名估值的标准是什么
- 安装win7提示无法配置到计算机,安装win7出现“无法将windows配置为在此计算机的硬件上运行”怎么办...
- ThinkPHP 开发XXXXX后台