volley框架demo

main.xml

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_test_string"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="StringRequest" />

    <Button
        android:id="@+id/btn_test_json"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="JsonRequest" />

    <Button
        android:id="@+id/btn_test_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="ImageRequest" />

    <Button
        android:id="@+id/btn_test_networkimageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="NewWorkImageView" />

    <Button
        android:id="@+id/btn_test_imageloader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="ImageLoader" />

    <Button
        android:id="@+id/btn_test_myxml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="MyXMLRequest" />

    <Button
        android:id="@+id/btn_test_myjson"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="MyJsonRequest" />

    <ImageView
        android:id="@+id/iv_test_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp" />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/network_image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

MainActivity

package com.example.volleydemo;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

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.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.volleydemo.bean.Weather;
import com.example.volleydemo.bean.WeatherInfo;
import com.example.volleydemo.volleyRequest.MyGsonRequest;
import com.example.volleydemo.volleyRequest.MyXMLRequest;

import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.util.Log;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

/**
 *
本案例参考:
http://www.apihome.cn/view-detail-70212.html
http://www.apihome.cn/view-detail-70213.html
 *
 */

public class MainActivity extends Activity {

    public static final String LOG_TAG = "MainActivity";

    private Button btnString, btnJson, btnImage, btnMyXml, btnMyJson, btnImagerLoader, btnNewWorkImageView;
    private ImageView imageView;
    private NetworkImageView networkImageView;
    private RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initButton();

        requestQueue = Volley.newRequestQueue(this);

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        // if(requestQueue!=null){
        // requestQueue.cancelAll();
        // }
    }

    private void initButton() {
        btnString = (Button) this.findViewById(R.id.btn_test_string);
        btnJson = (Button) this.findViewById(R.id.btn_test_json);
        btnImage = (Button) this.findViewById(R.id.btn_test_image);
        btnMyXml = (Button) this.findViewById(R.id.btn_test_myxml);
        btnMyJson = (Button) this.findViewById(R.id.btn_test_myjson);
        btnImagerLoader = (Button) this.findViewById(R.id.btn_test_imageloader);
        btnNewWorkImageView = (Button) this.findViewById(R.id.btn_test_networkimageview);

        imageView = (ImageView) this.findViewById(R.id.iv_test_image);
        networkImageView = (NetworkImageView) this.findViewById(R.id.network_image_view);

        ButtonOnClickLisener btnListener = new ButtonOnClickLisener();
        btnString.setOnClickListener(btnListener);
        btnJson.setOnClickListener(btnListener);
        btnImage.setOnClickListener(btnListener);
        btnMyXml.setOnClickListener(btnListener);
        btnMyJson.setOnClickListener(btnListener);
        btnImagerLoader.setOnClickListener(btnListener);
        btnNewWorkImageView.setOnClickListener(btnListener);
    }

    private class ButtonOnClickLisener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            String url;
            switch (v.getId()) {
            case R.id.btn_test_string:

                // 创建请求
                url = "http://www.baidu.com";
                StringRequest strReq = new StringRequest(url, new Response.Listener<String>() {

                    @Override
                    public void onResponse(String arg0) {
                        Log.v(LOG_TAG, "StringRequest onResponse result->" + arg0);
                        Toast.makeText(MainActivity.this, "onResponse返回的长度:" + arg0.length(), Toast.LENGTH_SHORT)
                                .show();
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        Log.v(LOG_TAG, "onErrorResponse message->" + arg0.getMessage());
                    }
                });

                // 添加到请求队列中
                requestQueue.add(strReq);

                break;

            case R.id.btn_test_json:
                //
                url = "http://app.bang365.cn/home/api/";
                JsonObjectRequest joReq = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject arg0) {
                        Log.d("TAG", arg0.toString());
                        Toast.makeText(MainActivity.this, "json:" + arg0.toString(), Toast.LENGTH_SHORT).show();
                    }

                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        Log.v(LOG_TAG, "onErrorResponse message->" + arg0.getMessage());

                    }
                });
                // 添加到请求队列中
                requestQueue.add(joReq);

                break;

            case R.id.btn_test_image:
                url = "https://www.baidu.com/img/bdlogo.png";

                /**
                 * 第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,
                 * 指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于指定图片的颜色属性,Bitmap.
                 * Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,
                 * 而RGB_565则表示每个图片像素占据2个字节大小。
                 */

                ImageRequest imReq = new ImageRequest(url, new Response.Listener<Bitmap>() {

                    @Override
                    public void onResponse(Bitmap arg0) {
                        imageView.setImageBitmap(arg0);

                    }
                }, 0, 0, Config.RGB_565, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        Log.v(LOG_TAG, "onErrorResponse message->" + arg0.getMessage());
                        imageView.setImageResource(R.drawable.ic_launcher);
                    }

                });
                requestQueue.add(imReq);
                break;

            case R.id.btn_test_imageloader:
                url = "https://www.baidu.com/img/bdlogo.png";

                ImageLoader imageLoader = new ImageLoader(requestQueue, new MyImageCache());

                ImageListener imageListener = imageLoader.getImageListener(imageView, R.drawable.default_icon,
                        R.drawable.error_icon);

                // imageLoader.get(url, imageListener);
                imageLoader.get(url, imageListener, 200, 200);
                break;

            case R.id.btn_test_networkimageview:
                url = "http://pic13.nipic.com/20110309/6094063_105618524133_2.jpg";

                ImageLoader networkimageLoader = new ImageLoader(requestQueue, new MyImageCache());
                networkImageView.setDefaultImageResId(R.drawable.default_icon);
                networkImageView.setErrorImageResId(R.drawable.error_icon);
                networkImageView.setImageUrl(url, networkimageLoader);

                break;

            case R.id.btn_test_myxml:
                // 返回天气预报
                url = "http://flash.weather.com.cn/wmaps/xml/china.xml";

                MyXMLRequest xmlRequest = new MyXMLRequest(url, new Response.Listener<XmlPullParser>() {
                    @Override
                    public void onResponse(XmlPullParser response) {
                        try {
                            int eventType = response.getEventType();
                            while (eventType != XmlPullParser.END_DOCUMENT) {
                                switch (eventType) {
                                case XmlPullParser.START_TAG:
                                    String nodeName = response.getName();
                                    if ("city".equals(nodeName)) {
                                        String pName = response.getAttributeValue(0);
                                        Log.d("TAG", "pName is " + pName);
                                    }
                                    break;
                                }
                                eventType = response.next();
                            }
                        } catch (XmlPullParserException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e(LOG_TAG, "onErrorResponse message:" + error.getMessage(), error);
                    }
                });

                requestQueue.add(xmlRequest);
                break;
            case R.id.btn_test_myjson:
                url = "http://www.weather.com.cn/data/sk/101010100.html";

                MyGsonRequest<Weather> mjReq = new MyGsonRequest<Weather>(url, Weather.class,
                        new Response.Listener<Weather>() {

                            @Override
                            public void onResponse(Weather weather) {
                                WeatherInfo weatherInfo = weather.getWeatherinfo();
                                Log.v("TAG", "city is " + weatherInfo.getCity());

                            }
                        }, new Response.ErrorListener() {

                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Log.e(LOG_TAG, "onErrorResponse message:" + error.getMessage(), error);

                            }
                        });

                requestQueue.add(mjReq);

                break;

            }

        }

    }

    private class MyImageCache implements ImageLoader.ImageCache {

        private LruCache<String, Bitmap> mCache;

        public MyImageCache() {
            // 缓存图片的大小设置为10M
            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);
        }

    }

}

自定义MyJsonRequest

package com.example.volleydemo.volleyRequest;

import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;

public class MyGsonRequest<T> extends Request<T> {

    private final Listener<T> mListener;  

    private Gson mGson;  

    private Class<T> mClass;  

    public MyGsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,
            ErrorListener errorListener) {
        super(method, url, errorListener);
        mGson = new Gson();
        mClass = clazz;
        mListener = listener;
    }  

    public MyGsonRequest(String url, Class<T> clazz, Listener<T> listener,
            ErrorListener errorListener) {
        this(Method.GET, url, clazz, listener, errorListener);
    }  

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(mGson.fromJson(jsonString, mClass),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        }
    }  

    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }  

}  

自定义MyXmlRequest

package com.example.volleydemo.volleyRequest;

import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

/**
 * 参考:http://www.apihome.cn/view-detail-70213.html
 *
 */

public class MyXMLRequest extends Request<XmlPullParser> {

    private final Listener<XmlPullParser> mListener;

    public MyXMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener) {
        super(method, url, errorListener);
        mListener = listener;
    }

    public MyXMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) {
        this(Method.GET, url, listener, errorListener);
    }

    @Override
    protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) {
        try {
            String xmlString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = factory.newPullParser();
            xmlPullParser.setInput(new StringReader(xmlString));
            return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (XmlPullParserException e) {
            return Response.error(new ParseError(e));
        }
    }

    @Override
    protected void deliverResponse(XmlPullParser response) {
        mListener.onResponse(response);
    }

}

两个bean

package com.example.volleydemo.bean;

public class Weather {  

    private WeatherInfo weatherinfo;  

    public WeatherInfo getWeatherinfo() {
        return weatherinfo;
    }  

    public void setWeatherinfo(WeatherInfo weatherinfo) {
        this.weatherinfo = weatherinfo;
    }  

}  

package com.example.volleydemo.bean;

public class WeatherInfo {  

    private String city;  

    private String temp;  

    private String time;  

    public String getCity() {
        return city;
    }  

    public void setCity(String city) {
        this.city = city;
    }  

    public String getTemp() {
        return temp;
    }  

    public void setTemp(String temp) {
        this.temp = temp;
    }  

    public String getTime() {
        return time;
    }  

    public void setTime(String time) {
        this.time = time;
    }  

}  

另:

1、在androidmainfest.xml中添加网络权限;

2、导入volley、json的包。

本文主要参考:

本案例参考:
http://www.apihome.cn/view-detail-70212.html
http://www.apihome.cn/view-detail-70213.html

时间: 2024-10-11 05:12:54

volley框架demo的相关文章

Google Volley框架源码走读

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<Google Volley使用之自定义> http://blog.csdn.net/yanbober/article/details/45307099 开源项目链接 Volley自定义 Android Developer文档 Volley主页:https://android.g

Volley框架

Volley框架 volley是谷歌官方在2013年推出的Android平台上的网络通信库 特点 网络通信更快,更简单,开发效率高,稳定性高. 对get和post网络请求以及网络图片高效的异步处理请求. 可以对网络请求进行优先级排序处理. 网络请求的缓存. 多级别取消请求. 和Activity生命周期的联动. 缺点不适合数据的上传与下载 Get和Post请求接口的使用请求对象 StringRequest 返回结果类型不确定(它包含后面两种) StringRequest request = new

Volley框架载入网络图片

Android开发中,载入网络server的图片是非经常常使用的.当然我们能够自己写server接口去实现,只是要做到server性能 优越的话,开发起来比較麻烦点.所以本博客要介绍Volley框架进行网络图片载入的demo! Volley框架集成了 AsyncHttpClient和Universal-Image-Loader的长处.开发起来很的方便了.并且性能也不错! 我们能够去下载Volley.jar,这个是我在网上找的:点击打开链接 能够去下载这个我在网上找的哦! 注意:这些网络请求的.首

Volley框架源码浅析(一)

尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天开始,我打算为大家呈现关于Volley框架的源码分析的文章,Volley框架是Google在2013年发布的,主要用于实现频繁而且粒度比较细小的Http请求,在此之前Android中进行Http请求通常是使用HttpUrlConnection和HttpClient进行,但是使用起来非常麻烦,而且效率比较地下,我想谷歌正式基于此种原因发布了Volley框架,其实出了Voll

Google Volley框架之https请求

先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支持自己搞的https证书. 改动volley源代码:com.android.myvolley.toolbox.HurlStack /** * Create an {@link HttpURLConnection} for the specified {@code url}. */ protected

Volley框架源码浅析(二)

尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列:本地队列和网络队列 /** The cache triage queue. */ private final PriorityBlockingQueue<Request<?>> mCacheQueue = new PriorityBlockingQueue<Request<

Android Volley 框架的使用(一)

为什么要使用Volley框架 开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等: 而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷:抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Req

Volley框架源码分析

Volley框架分析Github链接 Volley框架分析 Volley源码解析 为了学习Volley的网络框架,我在AS中将Volley代码重新撸了一遍,感觉这种照抄代码也是一种挺好的学习方式.再分析Volley源码之前,我们先考虑一下,如果我们自己要设计一个网络请求框架,需要实现哪些事情,有哪些注意事项? 我的总结如下: 需要抽象出request请求类(包括url, params, method等),抽象出request请求类之后,我们可以对其继承从而实现丰富的扩展功能. 需要抽象出resp

Volley框架的原理剖析--&gt;

Volley的主要特点: 1.扩展性强.Volley中大多数都是基于接口的设计,可配置性强. 2.一定程度符合Http规范,包括返回ResponseCode的处理,请求头的处理,缓存机制的支持等.并支持重试及优先级定义. 3.默认Android2.3及以上基于HttpURLConnection,2.3以下基于HttpCllient. 4.提供简便的图片加载工具. Volley主要是通过两种Dispatch Thread不断从RequestQueue中取出请求,根据是否已缓存调用Cache或Net