网络通信框架Volley之一——获取String数据和图片的异步加载
来源:互联网 发布:php采集cookie设置 编辑:程序博客网 时间:2024/05/22 01:51
在android开发中,与后台交互获取数据必不可少,android系统中提供了几种方式获取网络数据,但是都比较复杂。网络上也提供了很多的网络获取数据的框架,我之前也用过一些,但是并不顺手有些小麻烦。android的工程师们通过努力开发出了一个比较简单的获取网络数据的框架——Volley。关于Volley的介绍大家可以去看看http://blog.csdn.net/guolin_blog/article/details/17482095。下面我就结合自己开发中对volley的学习来跟大家一起分享Volley的应用实例。本篇主要传上Volley的应用获取String数据和图片的异步加载,下面哥们就直接进入主题了:
1.无图无真相:
2.主要代码:
A.MainActivity
package com.example.volleydemo;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
// getstring按钮点击事件
@OnClick(R.id.string)
public void GetString(View view) {
Intent intent = new Intent(this, GetStringActivity.class);
startActivity(intent);
}
// getImageRequest按钮点击事件
@OnClick(R.id.requestimage)
public void GetImageRequest(View view) {
Intent intent = new Intent(this, GetRequestImageActivity.class);
startActivity(intent);
}
// getImageLoader按钮点击事件
@OnClick(R.id.loader_image)
public void GetImageLoader(View view) {
Intent intent = new Intent(this, GetLoaderImageActivity.class);
startActivity(intent);
}
// getNetImage按钮点击事件
@OnClick(R.id.net_image)
public void GetNetImage(View view) {
Intent intent = new Intent(this, GetNetImageActivity.class);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewUtils.inject(this);
}
}
B.GetStringActivity
/**
* The android master of the future
* @data 2014.9.14 21:00
*@author xingfu
* */
package com.example.volleydemo;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.widget.TextView;
import com.android.volley.AuthFailureError;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
//获取String数据
public class GetStringActivity extends Activity {
@ViewInject(R.id.string_tv)
private TextView string_tv;
private RequestQueue mQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string);
ViewUtils.inject(this);
initGetRequest();
// initPostRequest();
}
// get请求连接网络获取数据
private void initGetRequest() {
final ProgressDialog pBar = new ProgressDialog(this);
pBar.setMessage("亲,正在加载数据。。。。");
pBar.show();
// 创建一个RequestQueue对象
mQueue = Volley.newRequestQueue(this);
// 创建一个StringRequest对象
StringRequest stringRequest = new StringRequest("http://fanyi.baidu.com/#en/zh/volley",
new Response.Listener<String>() {
// 请求成功监听
@Override
public void onResponse(String response) {
pBar.dismiss();
string_tv.setText(response);
}
}, new Response.ErrorListener() {
// 请求失败监听
@Override
public void onErrorResponse(VolleyError error) {
}
});
// 将StringRequest对象添加到RequestQueue里面
mQueue.add(stringRequest);
}
// post请求连接网络获取数据
private void initPostRequest() {
// post格式:StringRequest stringRequest = new StringRequest(Method.POST,
// url,
// listener, errorListener);
StringRequest stringRequest = new StringRequest(Method.POST, "设置连接网址",
new Listener<String>() {
// 请求成功监听
@Override
public void onResponse(String response) {
}
}, new ErrorListener() {
// 请求失败监听
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("params1", "value1");
map.put("params2", "value2");
return map;
}
};
}
}
C..GetRequestImageActivity
package com.example.volleydemo;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
public class GetRequestImageActivity extends Activity {
// 创建一个RequestQueue对象
RequestQueue mQueue;
@ViewInject(R.id.image)
private ImageView imageView;
private ProgressDialog pBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imagerequest);
ViewUtils.inject(this);
pBar = new ProgressDialog(this);
pBar.setMessage("亲,正在加载图片。。。。");
// 1. 创建一个RequestQueue对象。
mQueue = Volley.newRequestQueue(this);
initImageRequest();
}
// ImageRequest获取图片
private void initImageRequest() {
imageView.setVisibility(View.VISIBLE);
pBar.show();
// 2.创建一个ImageRequest对象
ImageRequest imageRequest = new ImageRequest(
"http://www.huabian.com/uploadfile/2014/0718/20140718045451564.jpg",
new Response.Listener<Bitmap>() {
@Override
// 成功监听
public void onResponse(Bitmap response) {
pBar.dismiss();
imageView.setImageBitmap(response);
}
// 设置参数,宽和高指定成0的话就表示不管图片有多大,都不会进行压缩,指定图片的颜色属性
}, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
@Override
// 失败监听
public void onErrorResponse(VolleyError error) {
Log.i("请求失败:", error.toString());
imageView.setImageResource(R.drawable.meimei);
}
});
// 3. ImageRequest对象添加到RequestQueue里
mQueue.add(imageRequest);
}
}
D.GetLoaderImageActivity
package com.example.volleydemo;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.View;
import android.widget.ImageView;
//ImageLoader加载网络图片
public class GetLoaderImageActivity extends Activity {
// 创建一个RequestQueue对象
RequestQueue mQueue;
@ViewInject(R.id.image)
private ImageView imageView;
private ImageLoader imageLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imagerequest);
ViewUtils.inject(this);
// 1. 创建一个RequestQueue对象。
mQueue = Volley.newRequestQueue(this);
initImageLoader();
}
// ImageLoader获取图片
private void initImageLoader() {
imageView.setVisibility(View.VISIBLE);
// 2.创建ImageLoader对象
imageLoader = new ImageLoader(mQueue, new BitmapCache());
// 3. 获取一个ImageListener对象。
ImageListener listener = ImageLoader.getImageListener(imageView,
R.drawable.meimei, R.drawable.meimei);
// 4. 调用ImageLoader的get()方法加载网络上的图片。
imageLoader
.get("http://www.huabian.com/uploadfile/2014/0718/20140718045453253.jpg",
listener);
// 指定图片允许的最大宽度和高度
// imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",
// listener, 500, 500);
}
}
E.GetNetImageActivity
package com.example.volleydemo;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.lidroid.xutils.view.annotation.ViewInject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.View;
import android.widget.ImageView;
//NetworkImageView获取网络图片
public class GetNetImageActivity extends Activity {
// 创建一个RequestQueue对象
RequestQueue mQueue;
@ViewInject(R.id.image)
private ImageView imageView;
private NetworkImageView networkImageView;
private ImageLoader imageLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imagerequest);
networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);
// 1. 创建一个RequestQueue对象。
mQueue = Volley.newRequestQueue(this);
initNetImage();
}
// NetworkImageView获取图片
private void initNetImage() {
networkImageView.setVisibility(View.VISIBLE);
// 设置默认图片
networkImageView.setDefaultImageResId(R.drawable.meimei);
// 设置加载错误时的图片
networkImageView.setErrorImageResId(R.drawable.meimei);
// 创建ImageLoader对象
imageLoader = new ImageLoader(mQueue, new BitmapCache());
networkImageView
.setImageUrl(
"http://img3.imgtn.bdimg.com/it/u=811309313,1633422298&fm=23&gp=0.jpg",
imageLoader);
}
}
H.图片缓存工具类
package com.example.volleydemo;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
//图片缓存工具类
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
好了。代码有详细的注释,希望能帮助有需要的哥们,下一篇将为传上获取Json和Xml数据的实例,以及解析数据并显示,希望大家支持!
- 网络通信框架Volley之一——获取String数据和图片的异步加载
- Android 网络通信框架Volley简介以及获取JSON对象和图片加载例子
- 网络通信框架Volley之二——访问服务器获取Json.xml数据和详细的解析数据
- Android Volley网络通信框架的使用(二):Volley加载网络图片
- android Volley请求框架的简单使用——访问网络和加载图片
- Android网络请求开源框架Volley快速使用指南(2)——异步获取图片
- Android异步加载获取网络数据(图片)
- volley 框架 加载网络图片
- Volley框架加载网络图片
- 【Android】Volley网络异步通信框架的使用
- 安卓网络通信框架Volley学习(二)基于Volley高效加载网络图片
- Volley框架的使用(加载网络图片,加载json数据)
- Volley 网络框架异步加载入门
- 使用Volley异步加载网络图片
- 关于异步加载获取网络图片的
- Volley网络框架之缓存加载图片、Post与get的数据请求
- Volley框架之网络请求和图片加载
- volley获取JSON数据+异步加载图片+NetworkImageView加载网路图片(一)
- 递归
- 给大家说明。常用sqlserver 语句命令
- hdu ACM STEPS 1.2.7
- linux学习之C语言(2)------ gcc
- 给大家说明。mysql 找回被删除的数据表
- 网络通信框架Volley之一——获取String数据和图片的异步加载
- 机房的问题(一)
- 2014 西安赛区网络赛 5012Dice
- net start mysql启动mysql,提示发生系统错误5拒绝访问解决方法
- 嵌入式Boa服务器gethostbyname:: Success解决办法
- 编程之美:第一章 1.2 中国象棋将帅问题
- HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
- 牛腩新闻发布系统——坎坷的验证码
- android 四种启动模式