Android 网络通信框架Volley简介(Google IO 2013)的学习使用(小白做记录)

Android 网络通信框架Volley简介(Google IO 2013)的学习使用(小白做记录)

import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
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.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
public class MainActivity extends Activity {
private RequestQueue mQueue;
NetworkImageView networkImageView;
private ImageView imageRequestView;
private ImageView imageLoaderView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    mQueue = Volley.newRequestQueue(MainActivity.this);
    imageRequestView = (ImageView) findViewById(R.id.image_request);
    imageLoaderView = (ImageView) findViewById(R.id.image_loader);
    networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);
    findViewById(R.id.startactivity).setOnClickListener(
    new OnClickListener() {
    @Override
    public void onClick(View v) {
    startActivity(new Intent(MainActivity.this,
    OtherActivity.class));
    }
    });
    
    /* ImageRequest的用法 */
    ImageRequest imageRequest = new ImageRequest(
    "http://img2.imgtn.bdimg.com/it/u=356245718,4187900464&fm=21&gp=0.jpg",
    new Response.Listener<Bitmap>() {
    @Override
    public void onResponse(Bitmap response) {
    imageRequestView.setImageBitmap(response);
    }
    }, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
    imageRequestView
    .setImageResource(R.drawable.icon_error);
    }
    });
    mQueue.add(imageRequest);
    
    /* ImageLoader的用法 */
    ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
    ImageListener listener = ImageLoader.getImageListener(imageLoaderView,
    R.drawable.ic_launcher, R.drawable.ic_launcher);
    imageLoader
    .get("http://img5.imgtn.bdimg.com/it/u=3462404313,3291882384&fm=21&gp=0.jpg",
    listener);
    // imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener,
    // 200, 200);
    
    /* NetworkImageView的用法 */
    networkImageView.setDefaultImageResId(R.drawable.ic_launcher);
    networkImageView.setErrorImageResId(R.drawable.ic_launcher);
    networkImageView
    .setImageUrl(
    "http://img5.imgtn.bdimg.com/it/u=507528704,2967639579&fm=90&gp=0.jpg",
    new ImageLoader(mQueue, new BitmapCache()));
    
    }
    
    public void onRequest(View view) {
    XrVolleyTools tools = new XrVolleyTools(this, new ResponseInterfaces() {
    /* 请求成功,返回XML */
    @Override
    public void onResponse(XmlPullParser response) {
        Toast.makeText(MainActivity.this,
        "xml   ---   " + response + "   xml需要解析", 1).show();
    }
    /* 请求成功,返回JSON */
    @Override
    public void onResponse(JSONObject response) {
        Toast.makeText(MainActivity.this, "json   ---   " + response, 1)
        .show();
    }
    /* 请求成功,返回String */
    @Override
    public void onResponse(String response) {
        Toast.makeText(MainActivity.this, "string   ---   " + response,
        1).show();
    }
    /* 请求失败 */
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(MainActivity.this, "error   ---   " + error, 1)
        .show();
    }});
    tools.xrStringRequest("http://www.baidu.com");
    tools.xrJsonRequest("http://m.weather.com.cn/data/101010100.html");
    tools.xrXmlRequest("http://flash.weather.com.cn/wmaps/xml/beijing.xml");
    }
}

import java.util.Map;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
import android.util.Log;
import com.android.volley.AuthFailureError;
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.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
public class XrVolleyTools {
private Context mContext;
private RequestQueue mQueue;
private ResponseInterfaces mInterfaces;
public XrVolleyTools(Context context, ResponseInterfaces interfaces) {
this.mContext = context;
this.mInterfaces = interfaces;
this.mQueue = Volley.newRequestQueue(mContext);
}
/**
* @Title: xrStringRequest
* @Description: TODO(xrStringRequest)
* @param @param url
* @return void
*/
public void xrStringRequest(String url) {
    StringRequest stringRequest = new StringRequest(url,
    new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.d("String", response);
        mInterfaces.onResponse(response);
    }}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("String error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }});
    mQueue.add(stringRequest);
}
/**
* @Title: xrStringRequest
* @Description: TODO(xrStringRequest)
* @param @param method
* @param @param url
* @param @param map
* @return void
*/
public void xrStringRequest(int method, String url,
final Map<String, String> map) {
    StringRequest stringRequest = new StringRequest(method, url,
    new Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.d("String", response);
        mInterfaces.onResponse(response);
    }},new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("String error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }}) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }};
    mQueue.add(stringRequest);
}
/**
* @Title: xrJsonRequest
* @Description: TODO(xrJsonRequest)
* @param @param url
* @return void
*/
public void xrJsonRequest(String url) {
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null,
    new Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        Log.d("Json", response.toString());
        mInterfaces.onResponse(response);
    }}, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Json error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }});
    mQueue.add(jsonObjectRequest);
}
/**
* @Title: xrJsonRequest
* @Description: TODO(xrJsonRequest)
* @param @param method
* @param @param url
* @param @param map
* @return void
*/
public void xrJsonRequest(int method, String url,
final Map<String, String> map) {
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method,
    url, null, new Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        Log.d("Json", response.toString());
        mInterfaces.onResponse(response);
    }}, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Json error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }}){
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }};
    mQueue.add(jsonObjectRequest);
}
/**
* @Title: xrXmlRequest
* @Description: TODO(xrXmlRequest)
* @param @param url
* @return void
*/
public void xrXmlRequest(String url) {
    XmlRequest xmlRequest = new XmlRequest(url,
    new Listener<XmlPullParser>() {
    @Override
    public void onResponse(XmlPullParser response) {
        Log.d("Xml", response.toString());
        mInterfaces.onResponse(response);
    }
    }, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Xml error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }});
    mQueue.add(xmlRequest);
}
/**
* @Title: xrXmlRequest
* @Description: TODO(xrXmlRequest)
* @param @param method
* @param @param url
* @param @param map
* @return void
*/
public void xrXmlRequest(int method, String url,
final Map<String, String> map) {
    XmlRequest xmlRequest = new XmlRequest(method, url,
    new Listener<XmlPullParser>() {
    @Override
    public void onResponse(XmlPullParser response) {
        Log.d("Xml", response.toString());
        mInterfaces.onResponse(response);
    }}, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Xml error", error.getMessage(), error);
        mInterfaces.onErrorResponse(error);
    }}) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            return map;
            }
        };
     mQueue.add(xmlRequest);
    }
}

//返回XML格式的类
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.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
public class XmlRequest extends Request<XmlPullParser> {
private final Listener<XmlPullParser> mListener;
    
    public XmlRequest(int method, String url, Listener<XmlPullParser> listener,
    ErrorListener errorlistener) {
    super(method, url, errorlistener);
    mListener = listener;
    }
    
    public XmlRequest(String url, Listener<XmlPullParser> listener,
    ErrorListener errorlistener) {
        this(Method.GET, url, listener, errorlistener);
    }

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

    @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));
        }
    }
}

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
/**
 * @ClassName: BitmapCache
 * @Description: TODO(图片缓存10M)
 * @author A18ccms a18ccms_gmail_com
 * @date 2015-4-21 下午4:05:37
 * 
 */
public class BitmapCache implements ImageCache {
    private LruCache<String, Bitmap> mCache;
    public BitmapCache() {
    
    int maxSize = 10 * 1024 * 1024;// 10M的缓存
    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);
    }
}

//小白做记录,还在抄代码的阶段,吐槽就免了

http://pan.baidu.com/s/1jGsx0ma

你可能感兴趣的:(Android 网络通信框架Volley简介(Google IO 2013)的学习使用(小白做记录))