难道你想一辈子做普工? 嘉华职业教育北大青鸟东莞校区—— 一个改...
东莞北大青鸟王牌专业快到碗里来软件工程师、网络工程师、JAVA工程...
华洋视频作品
东莞金码校区迎新年会
学计算机我选北大青鸟东莞金码 技术酷 实操多 老师牛 薪资高 职业好
新春活动页
2024学什么技术好
学什么技术有前途?学什么技术最好?
在android应用开发的时候,加载网络图片是一个非常重要的部分,很多图片不可能放在本地,所以就必须要从服务器或者网络读取图片。
软引用是一个现在非常流行的方法,用户体验比较好,不用每次都需要从网络下载图片,如果下载后就存到本地,下次读取时首先查看本地有没有,如果没有再从网络读取。
记得2月份在和爱奇艺公司的项目总监一起搞联通的OTT盒子的时候他就提了一下软引用,奇艺做的手机客户端就是采用这种方法,所以你会发现奇艺客户端占用很大的空间,下面就分享一下异步加载网络图片的方法吧。
FileCache.java
[java] view plaincopy
import java.io.File;
import android.content.Context;
public class FileCache {
private File cacheDir;
public FileCache(Context context) {
// 找一个用来缓存图片的路径
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
cacheDir = new File(android.os.Environment.getExternalStorageDirectory(),
"文件夹名称");
else
cacheDir = context.getCacheDir();
if (!cacheDir.exists())
cacheDir.mkdirs();
}
public File getFile(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
return f;
}
public void clear() {
File[] files = cacheDir.listFiles();
if (files == null)
return;
for (File f : files)
f.delete();
}
}
HttpUtil.java
[java] view plaincopy
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
/**
* Http 请求工具类
*
* @author Scorpio.Liu
*
*/
public class HttpUtil {
/**
* 获取响应字符串
*
* @param path
* 路径
* @param parameters
* 参数
* @return 响应字符串
*/
public static String getResponseStr(String path, Map
StringBuffer buffer = new StringBuffer();
URL url;
try {
if (parameters != null && !parameters.isEmpty()) {
for (Map.Entry
// 完成转码操作
buffer.append(entry.getKey()).append("=")
.append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
}
buffer.deleteCharAt(buffer.length() - 1);
}
url = new URL(path);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);// 表示从服务器获取数据
urlConnection.setDoOutput(true);// 表示向服务器写数据
// 获得上传信息的字节大小以及长度
byte[] mydata = buffer.toString().getBytes();
// 表示设置请求体的类型是文本类型
urlConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Content-Length", String.valueOf(mydata.length));
// 获得输出流,向服务器输出数据
OutputStream outputStream = urlConnection.getOutputStream();
outputStream.write(mydata, 0, mydata.length);
outputStream.close();
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
return changeInputStream(urlConnection.getInputStream());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private static String changeInputStream(InputStream inputStream) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
String result = "";
if (inputStream != null) {
try {
while ((len = inputStream.read(data)) != -1) {
outputStream.write(data, 0, len);
}
result = new String(outputStream.toByteArray(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public static InputStream getInputStream(String path) {
URL url;
try {
url = new URL(path);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);// 表示从服务器获取数据
urlConnection.connect();
if (urlConnection.getResponseCode() == 200)
return urlConnection.getInputStream();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static byte[] readStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
public static void CopyStream(String url, File f) {
FileOutputStream fileOutputStream = null;
InputStream inputStream = null;
try {
inputStream = getInputStream(url);
byte[] data = new byte[1024];
int len = 0;
fileOutputStream = new FileOutputStream(f);
while ((len = inputStream.read(data)) != -1) {
fileOutputStream.write(data, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
MemoryCache.java
[java] view plaincopy
import java.lang.ref.SoftReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.graphics.Bitmap;
public class MemoryCache {
private Map
.synchronizedMap(new HashMap
public Bitmap get(String id) {
if (!cache.containsKey(id))
return null;
SoftReference
return ref.get();
}
public void put(String id, Bitmap bitmap) {
cache.put(id, new SoftReference
}
public void clear() {
cache.clear();
}
}
ImageLoader.java
[java] view plaincopy
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.widget.ImageView;
public class ImageLoader {
private MemoryCache memoryCache = new MemoryCache();
private FileCache fileCache;
private Map
.synchronizedMap(new WeakHashMap
private ExecutorService executorService;
private boolean isSrc;
/**
* @param context
* 上下文对象
* @param flag
* true为source资源,false为background资源
*/
public ImageLoader(Context context, boolean flag) {
fileCache = new FileCache(context);
executorService = Executors.newFixedThreadPool(5);
isSrc = flag;
}
final int stub_id = R.drawable.ic_launcher;
public void DisplayImage(String url, ImageView imageView) {
String u1 = url.substring(0, url.lastIndexOf("/") + 1);
String u2 = url.substring(url.lastIndexOf("/") + 1);
try {
u2 = URLEncoder.encode(u2, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
url = u1 + u2;
imageViews.put(imageView, url);
Bitmap bitmap = memoryCache.get(url);
if (bitmap != null) {
if (isSrc)
imageView.setImageBitmap(bitmap);
else
imageView.setBackgroundDrawable(new BitmapDrawable(bitmap));
} else {
queuePhoto(url, imageView);
if (isSrc)
imageView.setImageResource(stub_id);
else
imageView.setBackgroundResource(stub_id);
}
}
private void queuePhoto(String url, ImageView imageView) {
PhotoToLoad p = new PhotoToLoad(url, imageView);
executorService.submit(new PhotosLoader(p));
}
private Bitmap getBitmap(String url) {
try {
File f = fileCache.getFile(url);
// 从sd卡
Bitmap b = onDecodeFile(f);
if (b != null)
return b;
// 从网络
Bitmap bitmap = null;
System.out.println("ImageLoader-->download");
HttpUtil.CopyStream(url, f);
bitmap = onDecodeFile(f);
return bitmap;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public Bitmap onDecodeFile(File f) {
try {
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 解码图像用来减少内存消耗
*
* @param f
* @return
*/
public Bitmap decodeFile(File f) {
try {
// 解码图像大小
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
// 找到正确的刻度值,它应该是2的幂。
final int REQUIRED_SIZE = 70;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}
/**
* 任务队列
*
* @author Scorpio.Liu
*
*/
private class PhotoToLoad {
public String url;
public ImageView imageView;
public PhotoToLoad(String u, ImageView i) {
url = u;
imageView = i;
}
}
class PhotosLoader implements Runnable {
PhotoToLoad photoToLoad;
PhotosLoader(PhotoToLoad photoToLoad) {
this.photoToLoad = photoToLoad;
}
@Override
public void run() {
if (imageViewReused(photoToLoad))
return;
Bitmap bmp = getBitmap(photoToLoad.url);
memoryCache.put(photoToLoad.url, bmp);
if (imageViewReused(photoToLoad))
return;
BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
Activity a = (Activity) photoToLoad.imageView.getContext();
a.runOnUiThread(bd);
}
}
boolean imageViewReused(PhotoToLoad photoToLoad) {
String tag = imageViews.get(photoToLoad.imageView);
if (tag == null || !tag.equals(photoToLoad.url))
return true;
return false;
}
/**
* 显示位图在UI线程
*
* @author Scorpio.Liu
*
*/
class BitmapDisplayer implements Runnable {
Bitmap bitmap;
PhotoToLoad photoToLoad;
public BitmapDisplayer(Bitmap b, PhotoToLoad p) {
bitmap = b;
photoToLoad = p;
}
public void run() {
if (imageViewReused(photoToLoad))
return;
if (bitmap != null) {
if (isSrc)
photoToLoad.imageView.setImageBitmap(bitmap);
else
photoToLoad.imageView.setBackgroundDrawable(new BitmapDrawable(bitmap));
} else {
if (isSrc)
photoToLoad.imageView.setImageResource(stub_id);
else
photoToLoad.imageView.setBackgroundResource(stub_id);
}
}
}
public void clearCache() {
memoryCache.clear();
fileCache.clear();
}
}
使用的时候用ImageLoader这个类就ok了,很方便~
初级程序员程序员软件工程师网络工程师高级网络工程师网络安全与高级应用工程师OSTA软件工程师OSTA网络工程师OSTA Java工程师
北大青鸟东莞金码组织学员进行各种户外拓展、郊游、烧烤等集体活动,让学员们充分感受集体生活的温暖和团队的力量。
北大青鸟东莞金码学校是北大青鸟APTECH在东莞唯一的授权中心,拥有软件开发工程师、网络工程师、安卓工程师、学士后Java工程师、学士后 NET工程师、网络营销师、电子商务师、启蒙星等课程授课资质。
清晨微风习习,带着初秋的些微凉意。而在东莞市中心的市政广场上,北大青鸟万人晨练签名活动,正火热进行,和以往不同的是,广场上多了一条彩色横幅,“早安青鸟,北大青鸟万人晨练,我们在这里!”这是东莞金码的学员宣言,也是学员们青春正能量的激荡。
北大青鸟东莞金码学校第十届校友会在报告厅顺利举行,本次校友会主题为为职场加点‘料’,出席本次校友会的嘉宾有:安卓主管方老师
一个月内找到6份工作,其中经历了四次群面,且每次都以出色的表现通过这一关。这个牛人就是南京大学数学系大四学生吴新雨。记者从前晚结束
现在越来越多的企业采取小组面试(Panel Interview)。似乎这种面试的形式逐渐成为一种流行的趋势。不仅是初级员工,包括很多高级人才和职业
一些职业限制因素是我们无法掌控的。新产品发布有可能被经济不景气拖累,你的导师在公司重组中失业,你必须在高层另找个新的获胜者作为导师
1、沉着。 我最喜欢的一个词语,以及每一位曾与我一起工作过的同事们身上我最喜欢的品质,凯利说,这意味着,当事情变得疯狂时,
面试是整个应聘过程中最重要、最直接的环节,相比于测评、笔试、背景调查等环节,面试是候选人与雇主直接面对面交流的机会,把握住面试机会
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res layout 下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
phpMyAdmin配置安装全攻略phpMyAdmin安装配置教程傻瓜版,主要为phpMyAdmin 2.11.X 配置安装,其它版本安装方法一样。1、先下载 phpMy...
一般常见的SEO的外链思维仅仅是停留在几个目标关键词上,而行业站却不同,我们要 做的是通过SEO手段,挖掘海量的长尾关键词然后获得巨大的
外界对于营销现实之状况有些茫然,根本的原因在于对自身行业的无奈,营销从来没有相对的规则,说圆并不是圆,说方也难以成方,而发出的营销...
TCP/IP(Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,...
第四届“北大青鸟杯”全国IT精英挑战赛总决赛的结果终于出炉了!经过层层筛选,北大青鸟东莞金码学校代表队从众多项目中,脱颖而出取得优异成绩。北大青鸟东莞金码学校代表队项目“UFO单车”以优异的技术表现脱颖而出闯出全国评审和总决赛。
为让更多的人了解IT行业的发展前景,更清楚地认识网络工程技术,选取最适合自己的发展方向,3月29日,北大青鸟东莞金码学校在广东科技学院
打工者2016学什么技术好?东莞工人春运返乡来年做什么?自从开始可以预购春运火车票,在东莞打工的小张就忙碌起来,对他来说,辛苦一年攒了一
3月25日,北大青鸟青春与梦想演讲比赛决赛已拉开帷幕,观众们迫不及待想要看到我们决赛选手的精彩表现。参加决赛的选手已经整装待发。主持
通过《尖峰时刻2019》的集中培训,各位老师们更加熟悉IT行业发展的前景,对行业更具清晰的认识,能够更加准确的对学生的兴趣、爱好、能力、