1.UniversalImageLoader
options:
(1)showImageOnLoading //正在加载的图片
(2)showImageForEmptyUri //图上资源为空的时候显示的图片
(3)showImageOnFail //加载失败时显示的图片
(4)cacheInMemory //是否允许内存缓存
(5)cacheOnDisk //是否允许SD卡缓存
(6)considerExifParams //是否考虑JPEG图像EXIF参数(旋转,翻转)
(7)imageScaleType //设置图片以何种编码方式显示
/*
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
*/
(8)bitmapConfig //设置图片的解码类型 ARGB8888/RGB565
(9)resetViewBeforeLoading //加载前是否重置
(10)delayBeforeLoading //加载前延迟
(11)preProcessor //设置图片加入缓存前,对bitmap进行设置
(12)postProcessor //设置显示前的图片,显示后这个图片一直保留在缓存中
(13)decodingOptions //设置图片的解码配置
(14)extraForDownloader //额外下载器
(15)displayer //设置显示方式(样式或者动画等)
/*
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
CircleBitmapDisplayer(Color.WHITE, 5)
*/
(16)handler //Handle事件
.memoryCacheExtraOptions(480,800) //缓存图片的最大宽高
.diskCacheExtraOptions(480,800,null)
.memoryCacheSize(2*1024*1024) //内存缓存大小
.diskCacheSize(50*1024*1024) //SD卡缓存大小
.threadPoolSize(3) //线程池大小
.threadPriority(Thread.NORM_PRIORITY-2) //线程优先级
.taskExecutor(new ThreadPoolExecutor(10,30,1000, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(10))) //线程池
.tasksProcessingOrder(QueueProcessingType.LIFO) //设置图片加载和显示队列处理的类型
.denyCacheImageMultipleSizesInMemory() //设置是否允许在内存中缓存多个图片大小
.memoryCache(new LruMemoryCache(2*1024*1024)) //LruMemoryCache这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用
.memoryCacheSizePercentage(20) //设置内存缓存最大大小占当前应用可用内存的百分比
.diskCache(new UnlimitedDiskCache(cacheDir))
.diskCacheFileCount(100) //缓存文件总数
.diskCacheFileNameGenerator(new Md5FileNameGenerator()) //Md5FileNameGenerator()HashCodeFileNameGenerator()
.imageDownloader(new BaseImageDownloader(context,5*1000,30*1000)) //设置图片下载器 连接5s 读取30s
.imageDecoder(new BaseImageDecoder(true)) //设置图片解码器 true启用日记记录
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) //设置图片的显示选项
.writeDebugLogs() //打印DebugLogs
/*
OOM解决方案:
①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
*/
2.Asynchronous Http Client
get方法:client.get(url,HttpResponseHandler)
ResponseHandler: AsyncHttpResponseHandler 异步\ JsonHttpResponseHandler 返回JsonObject\FileAsyncHttpResponseHandler 返回文件
持久性cookies存储:
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);
自定义添加cookies,使用addCookies函数:
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
带参数的get/post方法:
1.创建空的RequestParams,然后添加参数
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
或者
2.创建时就添加参数
RequestParams params = new RequestParams("single", "value");
3.将一个已经存在的map放进RequestParams中
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);
上传带有参数的RequestParams
1.使用inputStream流处理:
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream, "passwords.txt");
2.使用文件对象处理:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
3.使用字节流数组byte[]
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");
使用FileAsyncHttpResponseHandler来下载二进制数据:
AsyncHttpClient client = new AsyncHttpClient();
client.get("https://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
// Do something with the file `response`
}
});
添加Http Basic Auth credentials:
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("https://example.com");
或者:
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
client.get("https://example.com");
3.RecycleView
mRecyclerView= (RecyclerView) findViewById(R.id.asy_recyclerview);
mAdapter=new RecycleAdapter(myDataSet);
mRecyclerView.setHasFixedSize(true); //让RecycleView保持固定的大小
mLayoutManager = new LinearLayoutManager(MainActivity.this); //设置布局管理器
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter); //设置RecycleAdapter
RecycleViewAdapter
onCreateViewHolder 方法:
创建ViewHolder
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_item, parent, false);
MyViewHolder vh=new MyViewHolder(v,mClickListener);
return vh;
参数:
parent ViewGroup: The ViewGroup into which the new View will be added after it is bound to an adapter position.
绑定适配器后添加的新视图
viewType int: The view type of the new View.
新视图类型
onBindViewHolder 方法:
在指定的位置添加数据
holder.mTextView.setText(mDataset.get(position));
参数:
holder VH: The ViewHolder which should be updated to represent the contents of the item at the given position in the data set.
在指定位置 更新item内容的viewholder
position int: The position of the item within the adapter's data set.
adapter数据设置的item的位置
payloads List: A non-null list of merged payloads. Can be empty list if requires full update.
非空list(merged payloads有效载荷) ,如果要求全部更新的话,list可以为空
getItemCount
返回在adapter中item的总数
return mDataset.size();
可以自定义ViewHolder去继承ViewHolder
public MyViewHolder(View itemView) {
super(itemView);
mImageView= (ImageView) itemView.findViewById(R.id.img_num);
}
options:
(1)showImageOnLoading //正在加载的图片
(2)showImageForEmptyUri //图上资源为空的时候显示的图片
(3)showImageOnFail //加载失败时显示的图片
(4)cacheInMemory //是否允许内存缓存
(5)cacheOnDisk //是否允许SD卡缓存
(6)considerExifParams //是否考虑JPEG图像EXIF参数(旋转,翻转)
(7)imageScaleType //设置图片以何种编码方式显示
/*
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
*/
(8)bitmapConfig //设置图片的解码类型 ARGB8888/RGB565
(9)resetViewBeforeLoading //加载前是否重置
(10)delayBeforeLoading //加载前延迟
(11)preProcessor //设置图片加入缓存前,对bitmap进行设置
(12)postProcessor //设置显示前的图片,显示后这个图片一直保留在缓存中
(13)decodingOptions //设置图片的解码配置
(14)extraForDownloader //额外下载器
(15)displayer //设置显示方式(样式或者动画等)
/*
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
CircleBitmapDisplayer(Color.WHITE, 5)
*/
(16)handler //Handle事件
.memoryCacheExtraOptions(480,800) //缓存图片的最大宽高
.diskCacheExtraOptions(480,800,null)
.memoryCacheSize(2*1024*1024) //内存缓存大小
.diskCacheSize(50*1024*1024) //SD卡缓存大小
.threadPoolSize(3) //线程池大小
.threadPriority(Thread.NORM_PRIORITY-2) //线程优先级
.taskExecutor(new ThreadPoolExecutor(10,30,1000, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(10))) //线程池
.tasksProcessingOrder(QueueProcessingType.LIFO) //设置图片加载和显示队列处理的类型
.denyCacheImageMultipleSizesInMemory() //设置是否允许在内存中缓存多个图片大小
.memoryCache(new LruMemoryCache(2*1024*1024)) //LruMemoryCache这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用
.memoryCacheSizePercentage(20) //设置内存缓存最大大小占当前应用可用内存的百分比
.diskCache(new UnlimitedDiskCache(cacheDir))
.diskCacheFileCount(100) //缓存文件总数
.diskCacheFileNameGenerator(new Md5FileNameGenerator()) //Md5FileNameGenerator()HashCodeFileNameGenerator()
.imageDownloader(new BaseImageDownloader(context,5*1000,30*1000)) //设置图片下载器 连接5s 读取30s
.imageDecoder(new BaseImageDecoder(true)) //设置图片解码器 true启用日记记录
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) //设置图片的显示选项
.writeDebugLogs() //打印DebugLogs
/*
OOM解决方案:
①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
*/
2.Asynchronous Http Client
get方法:client.get(url,HttpResponseHandler)
ResponseHandler: AsyncHttpResponseHandler 异步\ JsonHttpResponseHandler 返回JsonObject\FileAsyncHttpResponseHandler 返回文件
持久性cookies存储:
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);
自定义添加cookies,使用addCookies函数:
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
带参数的get/post方法:
1.创建空的RequestParams,然后添加参数
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
或者
2.创建时就添加参数
RequestParams params = new RequestParams("single", "value");
3.将一个已经存在的map放进RequestParams中
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);
上传带有参数的RequestParams
1.使用inputStream流处理:
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream, "passwords.txt");
2.使用文件对象处理:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
3.使用字节流数组byte[]
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");
使用FileAsyncHttpResponseHandler来下载二进制数据:
AsyncHttpClient client = new AsyncHttpClient();
client.get("https://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
// Do something with the file `response`
}
});
添加Http Basic Auth credentials:
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("https://example.com");
或者:
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
client.get("https://example.com");
3.RecycleView
mRecyclerView= (RecyclerView) findViewById(R.id.asy_recyclerview);
mAdapter=new RecycleAdapter(myDataSet);
mRecyclerView.setHasFixedSize(true); //让RecycleView保持固定的大小
mLayoutManager = new LinearLayoutManager(MainActivity.this); //设置布局管理器
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter); //设置RecycleAdapter
RecycleViewAdapter
onCreateViewHolder 方法:
创建ViewHolder
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_item, parent, false);
MyViewHolder vh=new MyViewHolder(v,mClickListener);
return vh;
参数:
parent ViewGroup: The ViewGroup into which the new View will be added after it is bound to an adapter position.
绑定适配器后添加的新视图
viewType int: The view type of the new View.
新视图类型
onBindViewHolder 方法:
在指定的位置添加数据
holder.mTextView.setText(mDataset.get(position));
参数:
holder VH: The ViewHolder which should be updated to represent the contents of the item at the given position in the data set.
在指定位置 更新item内容的viewholder
position int: The position of the item within the adapter's data set.
adapter数据设置的item的位置
payloads List: A non-null list of merged payloads. Can be empty list if requires full update.
非空list(merged payloads有效载荷) ,如果要求全部更新的话,list可以为空
getItemCount
返回在adapter中item的总数
return mDataset.size();
可以自定义ViewHolder去继承ViewHolder
public MyViewHolder(View itemView) {
super(itemView);
mImageView= (ImageView) itemView.findViewById(R.id.img_num);
}