package com.lsh.netdemo.net;
import android.graphics.Bitmap;
import android.util.Log;
import android.util.LruCache;
import android.widget.ImageView;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.StringRequest;
import com.lsh.netdemo.MyApplication;
import com.lsh.netdemo.R;
import com.lsh.netdemo.activity.BaseActivity;
import com.lsh.netdemo.bean.ListData;
import com.lsh.netdemo.util.JsonUtil;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class VolleyHelper {
static String host_address = "http://10.0.2.2:8080/listdata/";
private static ImageLoader.ImageCache sImageCache;
private static LruCache<String, Bitmap> sLruCache;
private static ImageLoader sImageLoader;
//volley需要一个请求队列,但是他必须在Application中声明
private static RequestQueue sRequestQueue = MyApplication.getRequestQueue();
/**
* 1.使用自定义request的方式去获取json数据,不会有乱码
*/
public static void getData(String url, final List<ListData.Data> dataList, final BaseActivity.InnerAdapter adapter) {
Request<String> request = new Request<String>(Request.Method.GET, host_address + url, null) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
byte[] data = response.data;
// Entry是指定缓存类型中的条目,注意需要解析获取,或者取消缓存
return Response.success(new String(data), HttpHeaderParser.parseCacheHeaders(response));
}
@Override
protected void deliverResponse(String response) {
ListData parse = JsonUtil.parse(ListData.class, response);
dataList.addAll(parse.list);
adapter.notifyDataSetChanged();
}
};
// 取消缓存
// request.setShouldCache(false);
sRequestQueue.add(request);
}
/**
* 2.使用默认定义的StringRequest处理json数据
*
* @param url
* @param dataList
*/
public static void getString(String url, final List<ListData.Data> dataList, final BaseActivity.InnerAdapter innerAdapter) {
sRequestQueue.add(new StringRequest(Request.Method.GET, host_address + url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
ListData parse = JsonUtil.parse(ListData.class, response);
dataList.addAll(parse.list);
innerAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Log.e("tag", "error");
}
}) {
/**
* 重写该方法,已达到修复文字乱码的问题
* @param response
* @return
*/
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
// 源码中实现是获取网络响应头中的文字编码,与U8不同时会造成乱码
// parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
parsed = new String(response.data, "UTF-8");
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
});
}
/**
* 使用request去获取对应的bitmap,低效率,很慢,画质差
*
* @param imageView
* @param url
*/
public static void getViewImage_request(final ImageView imageView, final String url) {
// 设置标记进行校验
imageView.setTag(url);
sRequestQueue.add(new ImageRequest(host_address + url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
// 校验标记
if (imageView.getTag().equals(url))
imageView.setImageBitmap(response);
}
}, 0, 0, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}));
}
/**
* 使用volley的ImageLoader来加载图片,高效,很慢,画质优秀
*
* @param url
* @param imageView
*/
public static void getViewImage_loader(String url, ImageView imageView) {
// volley没有实现默认的缓存,需要我们自己实现
// 1.初始化一个默认大小的内存缓存
if (sLruCache == null) {
sLruCache = getLruCache();
}
// 2.将对应的bitmap缓存存取方式进行封装
if (sImageCache == null)
sImageCache = new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return sLruCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
sLruCache.put(url, bitmap);
}
};
// 3.根据已经创建好的imageCache和queue来初始化一个新的imageLoader
if (sImageLoader == null)
sImageLoader = new ImageLoader(MyApplication.getRequestQueue(), sImageCache);
// 4.为对应的imageView生成一个默认的imageListener,并可以设置初始图片和失败图片
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
// 5.使用ImageLoader的get请求这个加载
sImageLoader.get(host_address + url, listener);
}
/**
* 获取一个LruCache
*/
private static LruCache getLruCache() {
long maxMemory = Runtime.getRuntime().maxMemory();
long cacheSize = maxMemory / 8;
sLruCache = new LruCache<String, Bitmap>((int) (cacheSize / 1024)) {
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
};
return sLruCache;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
简单总结各个框架的使用,以Get请求、JSON解析、图片加载为例。 分别使用6个框架HttpURLConnection、HttpClient、AndroidAsyncHttp、Volley、OkHttp、Retrofit2 包中有服务器数据,可做样例数据使用 详细总结:http://blog.csdn.net/ahmclishihao/article/details/52861285#t0
资源推荐
资源详情
资源评论
收起资源包目录
networkDemo.rar (46个子文件)
networkDemo
gradlew.bat 2KB
gradlew 5KB
gradle.properties 747B
app
proguard-rules.pro 667B
src
test
java
com
lsh
netdemo
ExampleUnitTest.java 409B
androidTest
java
com
lsh
netdemo
ExampleInstrumentedTest.java 763B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 80B
styles.xml 510B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
list_item.xml 773B
activity_main.xml 1KB
java
com
lsh
netdemo
bean
ListData.java 266B
MainActivity.java 2KB
net
HttpClientHelper.java 3KB
RetrofitHelper.java 4KB
HttpURLClientHelper.java 3KB
VolleyHelper.java 7KB
OkHttpHelper.java 3KB
AsyncHttpClientHelper.java 467B
activity
HttpClientActivity.java 693B
OkHttpActivity.java 649B
RetrofitActivity.java 1KB
VolleyActivity.java 638B
HttpURLClientActivity.java 874B
BaseActivity.java 3KB
AsyncHttpClientActivity.java 2KB
MyApplication.java 526B
util
JsonUtil.java 312B
BytesUtil.java 1KB
AndroidManifest.xml 1KB
app.iml 14KB
.gitignore 8B
build.gradle 2KB
libs
org.apache.http.legacy.jar 296KB
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
.gitignore 127B
settings.gradle 16B
VolleyDemo.iml 864B
build.gradle 519B
listdata(service).rar 3.64MB
共 46 条
- 1
资源评论
lsh-atom
- 粉丝: 14
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功