您的位置:首页 > 理论基础 > 计算机网络

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

2014-09-14 20:39 465 查看
在android开发中,与后台交互获取数据必不可少,android系统中提供了几种方式获取网络数据,但是都比较复杂。网络上也提供了很多的网络获取数据的框架,我之前也用过一些,但是并不顺手有些小麻烦。android的工程师们通过努力开发出了一个比较简单的获取网络数据的框架——Volley。关于Volley的介绍大家可以去看看/article/1562120.html。下面我就结合自己开发中对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数据的实例,以及解析数据并显示,希望大家支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐