android_HttpURLConnection
来源:互联网 发布:网络推广收费骗局 编辑:程序博客网 时间:2024/05/29 15:57
代码示例
try{
URL url = new URL("http://www.google.com”)//定义地址
HttpURLConnection http = (HttpURLConnection) url.openConnection();//打开连接
int nRC = http.getResponseCode();//得到连接状态
if(nRC == HttpURLConnection.HTTP_OK){
InputStream is = http.getInputStream();//取得数据
.....//处理数据
}
}catch(Exception e){
//因是连接网络,不免会出现一些异常,所以必须处理这些异常
}finally{
//关闭流
}
请求参数
URL realUrl = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection
conn.setDoOutput(true);//设置容许输出
conn.setUseCaches(false);//设置不使用缓存
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");//设置维持长连接
conn.setRequestProperty("Charset", "UTF-8");//设置文件字符集
conn.setRequestProperty("Content-Length", String.valueOf(data.length));//设置文件长度
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
HttpURLConnection框架Volley
Volley使用
private RequestQueue mRequestQueue; //声明一个新的RequestQueue对象
mRequestQueue = Volley.newRequestQueue(this); //在onCreate初始化mRequestQueue
JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() { //声明并使用Request
@Override
public void onResponse(JSONObject response) {
parseJSON(response);
va.notifyDataSetChanged();
pd.dismiss();
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
mRequestQueue.add(jr);
/**Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。
JsonObjectRequest:返回JSON对象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,这样可以自己处理数据,更加灵活。
另外可以继承Request<T>自定义Request。*/
取消Request
Activity停止的时候,同时取消所有或部分未完成的网络请求,Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程
for (Request <?> req : mRequestQueue) { //针对某些个request做取消操作
req.cancel();
}
mRequestQueue.cancelAll(this); //取消这个队列里的所有请求
mRequestQueue.cancelAll( new RequestFilter() {}); //可以根据RequestFilter或者Tag来终止某些请求
or
mRequestQueue.cancelAll(new Object());
Volley支持http的GET、POST、PUT、DELETE等方法
使用ImageRequest下载图片
singleImg=(ImageView)findViewById(R.id.volley_img_single_imgeview);
ImageRequest imgRequest=new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap arg0) {
// TODO Auto-generated method stub
singleImg.setImageBitmap(arg0);
}
}, 300, 200, Config.ARGB_8888, new ErrorListener(){
@Override
public void onErrorResponse(VolleyError arg0) {
}
});
mRequestQueue.add(imgRequest);
使用ImageLoader
ImageLoader这个类需要一个Request的实例以及一个ImageCache的实例。图片通过一个URL和一个ImageListener实例的get()方法就可以被加载。从哪里,ImageLoader会检查ImageCache,而且如果缓存里没有图片就会从网络上获取。 Volley的ImageCache接口允许你使用你喜欢的L1缓存实现。不幸的是Volley没有提供默认的实现。在I/O的介绍中展示了BitmapLruCache的一点代码片段,但是Volley这个库本身并不包含任何相关的实现。 ImageCache接口有两个方法,getBitmap(String url)和putBitmap(String url, Bitmap bitmap).这两个方法足够简单直白,他们可以添加任何的缓存实现。
RequestQueue mRequestQueue = Volley.newRequestQueue(this);
final LruCache<String, Bitmap> mImageCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
mImageCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return mImageCache.get(key);
}
};
ImageLoader mImageLoader = new ImageLoader(mRequestQueue, imageCache);
// imageView是一个ImageView实例
// ImageLoader.getImageListener的第二个参数是默认的图片resource id
// 第三个参数是请求失败时候的资源id,可以指定为0
ImageListener listener = ImageLoader
.getImageListener(imageView, android.R.drawable.ic_menu_rotate,
android.R.drawable.ic_delete);
mImageLoader.get(url, listener);
使用NetworkImageView
public class NetworkImageView extends ImageView
继承自ImageView,添加了一个
public void setImageUrl(String url, ImageLoader imageLoader) {}
方法,参数包含一个Url地址和一个ImageLoader对象
核心方法:
private void loadImageIfNecessary(final boolean isInLayoutPass) {}
内部实现,boolean 类型参数代表是否重新请求网络 ,true:重新请求 false:取缓存
内部实现和ImageLoader类似,都是通过ImageContainer中new一个ImageListener,在ImageListener,只是做了Url的空判断,如果Url为null,则调用ImageContainer.cancelRequest();取消请求。
覆写方法:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
//onLayout时重新请求
loadImageIfNecessary(true);
}
@Override
protected void onDetachedFromWindow() {
//销毁View的时候Release操作
if (mImageContainer != null) {
// If the view was bound to an image request, cancel it and clear
// out the image from the view.
mImageContainer.cancelRequest();
setImageBitmap(null);
// also clear out the container so we can reload the image if necessary.
mImageContainer = null;
}
super.onDetachedFromWindow();
}
//drawable状态改变重绘
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
invalidate();
}
开始下载的默认图和下载出错后显示图。
public void setDefaultImageResId(int defaultImage) {
mDefaultImageId = defaultImage;
}
public void setErrorImageResId(int errorImage) {
mErrorImageId = errorImage;
}
- android_HttpURLConnection
- Android_HttpURLConnection下载文件
- 顺序栈和链栈的基本操作
- ftp 配置
- UIPageControl
- Reader
- HDU 3507 Print Article 斜率dp
- android_HttpURLConnection
- IOS-UITextFiled常见的委托代理使用方法
- android_HttpClient
- C++,对象指针强转又会如何?
- IOS APP打包提交苹果store
- Flex 如何创建单例模式
- 获取触摸点坐标(忘记时看看)
- android_WebView
- VB是对API的封装 qq 快速登录 各种webservice接口搜集 ReReg.bat 注册登录组件