今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下用法。方便以后VC。

Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮。)

功能模块:





1. JSON,图像等的异步下载

---------------------------------------------------------------------------------------

2. 网络请求的排序(scheduling)

---------------------------------------------------------------------------------------

3. 网络请求的优先级处理

---------------------------------------------------------------------------------------

4. 缓存

---------------------------------------------------------------------------------------

5. 多级别取消请求

---------------------------------------------------------------------------------------

6. 和Activity和生命周期的联动(Activity结束时同一时候取消全部网络请求)









长处:Volley特别适合数据量不大可是通信频繁的场景。

Volley的jar包CSDN上有非常多,也能够上GitHub上下载。

以下是我写的一个简单的样例。

import org.json.JSONObject; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.v4.util.LruCache; 
import android.widget.ImageView; 
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.ImageLoader; 
import com.android.volley.toolbox.ImageLoader.ImageCache; 
import com.android.volley.toolbox.ImageLoader.ImageListener; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.NetworkImageView; 
import com.android.volley.toolbox.Volley; 
   
/**
 * Demo描写叙述: 
 * 利用Volley获取JSON数据
 * 利用Volley异步载入图片
 * 利用NetworkImageView载入网路图片
 */ 
public class MainActivity extends Activity { 
    private ImageView mImageView; 
    private NetworkImageView mNetworkImageView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        init(); 
    } 
       
    private void init(){ 
        mImageView=(ImageView) findViewById(R.id.imageView); 
        mNetworkImageView=(NetworkImageView)findViewById(R.id.networkImageView); 
        getJSONByVolley(); 
        loadImageByVolley(); 
        showImageByNetworkImageView(); 
    } 
   
    /**
     * 利用Volley获取JSON数据
     */ 
    private void getJSONByVolley() { 
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        String JSONDataUrl = "要訪问的URL"; 
        final ProgressDialog progressDialog = ProgressDialog.show(this, "This is title", "...Loading..."); 
   
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( 
                Request.Method.GET,  
                JSONDataUrl,  
                null, 
                new Response.Listener<JSONObject>() { 
                    @Override 
                    public void onResponse(JSONObject response) { 
                        System.out.println("response="+response); 
                        if (progressDialog.isShowing()&&progressDialog!=null) { 
                            progressDialog.dismiss(); 
                        } 
                    } 
                },  
                new Response.ErrorListener() { 
                    @Override 
                    public void onErrorResponse(VolleyError arg0) { 
                           System.out.println("sorry,Error"); 
                    } 
                }); 
        requestQueue.add(jsonObjectRequest); 
    } 
       
       
    /**
     * 利用Volley异步载入图片
     * 
     * getImageListener(ImageView view, int defaultImageResId, int errorImageResId)
     * 第一个參数:显示图片的ImageView
     * 第二个參数:默认显示的图片资源
     * 第三个參数:载入错误时显示的图片资源
     */ 
    private void loadImageByVolley(){ 
        String imageUrl="要訪问的URL"; 
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); 
        ImageCache imageCache = new ImageCache() { 
            @Override 
            public void putBitmap(String key, Bitmap value) { 
                lruCache.put(key, value); 
            } 
   
            @Override 
            public Bitmap getBitmap(String key) { 
                return lruCache.get(key); 
            } 
        }; 
        ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); 
        ImageListener listener = ImageLoader.getImageListener(mImageView, R.drawable.ic_launcher,R.drawable.ic_launcher); 
        imageLoader.get(imageUrl, listener); 
    } 
       
    /**
     * 利用NetworkImageView显示网络图片
     */ 
    private void showImageByNetworkImageView(){ 
        String imageUrl="要訪问的URL"; 
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); 
        ImageCache imageCache = new ImageCache() { 
            @Override 
            public void putBitmap(String key, Bitmap value) { 
                lruCache.put(key, value); 
            } 
   
            @Override 
            public Bitmap getBitmap(String key) { 
                return lruCache.get(key); 
            } 
        }; 
        ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); 
        mNetworkImageView.setImageUrl(imageUrl,imageLoader); 
    } 
   
}

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
     > 
   
    <com.android.volley.toolbox.NetworkImageView 
        android:id="@+id/networkImageView" 
        android:layout_width="120dip" 
        android:layout_height="120dip" 
    /> 
       
     <ImageView 
        android:id="@+id/imageView" 
        android:layout_width="120dip" 
        android:layout_height="120dip" 
    /> 
   
</RelativeLayout>

记录完成!下次用到直接VC!

Android开发之Volley网络通信框架的更多相关文章

  1. Android开发之Drag&Drop框架实现拖放手势

    Android3.0提供了drag/drop框架,利用此框架可以实现使用拖放手势将一个view拖放到当前布局中的另外一个view中.本文将介绍如何使用拖放框架. 一.实现拖放的步骤 首先,我们先了解一 ...

  2. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  3. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  4. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  5. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  6. Android开发之旅3:android架构

    引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我们对android有了个大致的了解,知道如何搭建andr ...

  7. Android开发之MdiaPlayer详解

    Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...

  8. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  9. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

随机推荐

  1. 转载:跟我一起写 Makefile

    陈皓(http://my.csdn.net/haoel) 概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得 ...

  2. c++PrimerChap7类

    仅仅记录贴,按书上的做完了一边,想把private分离出来已经很难了.因为is用到的成员变量都是直接当做public使用的,如果要改的话可以考虑存储输入,让后用构造函数对类进行初始化. #includ ...

  3. Qt之图形(简笔画-绘制卡通蚂蚁)

    简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...

  4. URAL - 1243 - Divorce of the Seven Dwarfs (大数取模)

    1243. Divorce of the Seven Dwarfs Time limit: 1.0 second Memory limit: 64 MB After the Snow White wi ...

  5. hadoop-03-安装java

    hadoop-03-安装java 1,su root 2, rpm -qa|grep jdk #查看已经安装的jdk 3,rpm -e --nodeps `rpm -qa|grep jdk ` #删除 ...

  6. cocos2dx 几个精灵依照顺序播放动画解决方法

    我先描写叙述一下这个问题: 拿之前做的卡牌游戏来说.假设一方场上有3张牌,那么肯定要以一种顺序来播放攻击动画.我是以从左到右的方式. 我的解决方案是向每张牌都传递一个延时參数,然后在runAction ...

  7. mfc 链接 access 2007 数据库

    神马也不说了,直接给出源代码和project 原理这个东西 Google  下.都出来了.自己就说下作为新手 , 1 应该打印出,链接错误原因 2 应该将数据库放到project以下,特别注意这点 给 ...

  8. echarts 地图 动态 展示 结合css+js

    echarts地图展示功能非常强大,官网上静态展示的样例非常多了,动态的资料少.研究了下.我眼下实现的通过ajax从server获取数据动态展示地图. 另外,我们有时候希望在地图之上做些自己定义的东西 ...

  9. Swift 字典的经常用法

    /* * *要正确使用字典,也须要一些条件 * 1.字典键值对的键和值的类型必须明白,能够直接指定.也能够类似数组直接赋值由编译器自己主动识别 * 2,字典必需要初始化 * 3,键的类型必须是能够被哈 ...

  10. Keyboard input

    Keyboard input Python provides a build-in function called raw_input (in version 2.x) that gets input ...