android volley框架 使用

volley google提供的一个关于网络请求的框架

参考:

http://blog.csdn.net/t12x3456/article/details/9221611

http://www.cnblogs.com/freexiaoyu/p/3446028.html

代码:

import org.json.JSONObject;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.android.volley.Request.Method;
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.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import com.android.volley.toolbox.ImageLoader.ImageListener;

/**
 * Volley 测试
 * 
 * @Description:volley测试
 * @author sleep
 * @date create date 2014年3月6日
 * @version V1.0
 */
public class MainActivity extends Activity implements View.OnClickListener
{
    Button getJson, getImg, netWork;
    ImageView img;
    NetworkImageView workImg;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getJson = (Button) findViewById(R.id.get_json);
        getJson.setOnClickListener(this);
        getImg = (Button) findViewById(R.id.get_image);
        getImg.setOnClickListener(this);
        netWork = (Button) findViewById(R.id.net_work);
        netWork.setOnClickListener(this);
        img = (ImageView) findViewById(R.id.img);
        workImg = (NetworkImageView) findViewById(R.id.net_work_img);
    }

    @Override
    public void onClick(View v)
    {
        if (v.equals(getJson))
        {
            getJson("http://www.baidu.com/");
        } else if (v.equals(getImg))
        {
            setImg("http://c.hiphotos.baidu.com/image/w%3D2048/sign=2da8c99e8026cffc692ab8b28d394b90/7af40ad162d9f2d3cdc19be8abec8a136227cce1.jpg");
        } else if (v.equals(netWork))
        {
            setNetWorkImage("http://h.hiphotos.baidu.com/image/w%3D2048/sign=149929469113b07ebdbd570838ef9023/e61190ef76c6a7ef21700641fffaaf51f3de6607.jpg");
        }
    }

    /*
     * Volley中,RequestQueue 为核心,所有访问都会使用到
     * getJson 请求json JsonObjectRequest(请求类型,路径,null,结果监听,错误监听)
     * 第三个参数可能是用来上传,只是可能,没有细看
     * 
     * imageLoader  LruCache:强引用,图片缓存的一种方式,20则表示缓存大小,这是引用类型缓存,不会保存在本地
     * ImageLoader.getImageListener(ImageView,默认图片,加载失败时的图片) 都是用id,的,可以为0,表示没有
     * 
     * NetWorkImageView 可以用来代替ImageView,imageView加载的时候,直接去请求,不用通过事件去加载ImageView
     * 
     */
    
    /**
     * NetWorkImageView 测试
     * 
     * @param url
     */
    private void setNetWorkImage(String 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);
        workImg.setTag("url");
        workImg.setImageUrl(url, imageLoader);
    }

    /**
     * 请求json
     * 
     * @param url
     */
    void getJson(String url)
    {
        // 请求json
        RequestQueue mQueue = Volley.newRequestQueue(this);
        JsonObjectRequest jsonRequest = new JsonObjectRequest(Method.GET, url,
                null, new Response.Listener<JSONObject>()
                {
                    public void onResponse(JSONObject response)
                    {
                        // 正常返回结果
                        System.out.println(response.toString());
                    }
                }, new Response.ErrorListener()
                {

                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        // 结果非json格式
                        Toast.makeText(MainActivity.this, "网络错误(-3)",
                                Toast.LENGTH_SHORT).show();
                    }

                });
        mQueue.add(jsonRequest);
        mQueue.start();
    }

    /**
     * 加载图片
     * 
     * @param url
     */
    void setImg(String url)
    {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        // 强引用、20个缓存
        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(img,
                R.drawable.ic_launcher, R.drawable.ic_launcher);
        imageLoader.get(url, listener);
        
        //下面代码无关
        img.setVisibility(View.VISIBLE);
    }
}

布局:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/get_json"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="get jsonObject" />

    <Button
        android:id="@+id/get_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:text="download Image" />

    <ImageView
        android:id="@+id/img"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/ic_launcher"
        android:visibility="gone" />

    <Button
        android:id="@+id/net_work"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NetworkImageView" />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/net_work_img"
        android:layout_width="200dp"
        android:layout_height="200dp" />

</LinearLayout>

 

posted @ 2014-03-06 16:35  sleepend  阅读(1114)  评论(0编辑  收藏  举报