网络通信框架Volley之一——获取String数据和图片的异步加载

在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数据的实例,以及解析数据并显示,希望大家支持!

猜你喜欢

转载自blog.csdn.net/jackiandroid/article/details/39272885