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

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

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

e4614684cb515f2cfa8f1f396c485b30.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值