volley框架-远端读取

来源:互联网 发布:hadoop2.8.2源码编译 编辑:程序博客网 时间:2024/04/28 19:17

 

 

volleyjar包添加到工程中。

全局变量:

RequestQueue queue = Volley.newRequetQueue(Context context);

String url = “”;

 

一、从远端获取字符串

 

StringRequest request = new StringRequest(Tequest.Method.GET,url,

  new Response.Listener<String>(){

@Override

public void onRespense(String result){

  //result为远端请求的数据,在此做请求成功的相应操作 包括UI界面更新

}

  },new Respense.ErrorListener(){

@Override

public void onErrorRespense(VolleyError volleyError){

}

  });

queue.add(request);

 

二、从远端获取图片(3种方法)

 

ImageView imageView = (ImageView)findViewById(R.id.img);

 

1、ImageRequest(推荐)

 

ImageRequest imageRequest = new ImageRequest(url,

  new Response.Listener<Bitmap>(){

@Override

public void onRespense(Bitmap bitmap){

  //加载成功时,UI界面更新 imageView .setImageBitmap(bitmap);

}

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

@Override

public void onErrorResponse(VolleyError volleyError){

  //加载失败时,UI界面显示;

}

  });

queue.add(imageRequest);

 

2、ImageLoader

 

ImageLoader loader = new ImageLoader(queue,new MyImageCache());

ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView,//加载中显示的图片,//加载失败时显示的图片);

loader .get(url,listener);

 

private class MyImageCache implements ImageLoader.ImageCache{

  private LruCache<String,Bitmap> mCache;//声明一个缓存对象

  public MyImageCache(){

int maxSize = 10*1024*1024;

mCache = new LruCache<>(maxSize);//实例化缓存对象并声明大小

  }

  @Override

  public Bitmap getBitmap(String url){

return mCache.get(url);

  }

  @Override

  public void putBitmap(String url,Bitmap bitmap){

mCache.put(url,bitmap);

  }

 }

 

3、NetWorkImageView

 

在布局中声明一个NetworkImageView组件

NetworkImageView netImg = (NetworkImageView)findViewById(R.id.netImg);

 

netImg.setImageUrl(url,new ImageLoader(queue,

  new ImageLoader.ImageCache(){

@Override

public Biemap getBitmap(String s){ return null; }

@Override

public void putBitmap(String s,Bitmap bitmap){}

  }));

netImg.setDefaultImageResId(//缺省图片ID);

netImg.setErrorImageResId(//加载失败时显示图片id);

 

 

三、从远端解析JSON数据

 

//JsonObjestRequest 获取的是json对象。而不是整个json

JsonObjestRequest request = new JsonObjestRequest(Request.Method.GET,url,null,

  new Response.Listener<JSONObject>(){

@Override

public void onRespense(JSONObject jsonObject){

  //加载成功后json解析相关操作 以及UI界面的更新;

}

  }new Respense.ErrorListener(){

@Override 

public void onErrorRespense(VolleyError volleyError){

  //加载失败后的相关操作;

}

  });

queue.add(request);

 

四、从远端解析XML数据

 

XMLRequest request = new XMLRequest(Request.Method.GET, url,

  new Response.ErrorListener(){

@Override

public void onErrorResponse(VolleyError volleyError){

  //加载失败后的相关操作;

}

  },new Response.Listener<XmlPullParser>(){

@Override

public void onResponse(XmlPullParser xmlPullParser){

  //加载成功后 解析XML的相应操作 以及UI界面的更新;

}

  });

queue.add(request);

 

//需要重写一个类继承Request用于XML解析 泛型为XmlPullParser

 

private class XMLRequest extends Request<XmlPullParser>{

  private Response.Listener listener;

  public XMLRequest(int method,String url,Respense.ErrorListener errorListener, 

Response.Listener listener){

Super(method, url, errorListener);

this.listener = listener;

  }

  @Override

  protected Respense<XmlPullParser> parseNetworkResponse(NetworkResponse respense){

XmlPullParser parser = null;

try{

   String s = new String(response.data, HttpHeaderarser.parseCharset(reaponse.headers));

   parser = Xml.newPullParser();

   parser.setInput(new StringReader(s));

} catch(UnsupportedEncodingException e){

   e.printStackTrace();

}catch(XmlPullParserException e){

   e.printStackTrace();

}

return Response.success(parser,HttpHeaderParser.parseCacheHeaders(response));

  }

  @Override

  protected void deliverResponse(XmlPullParser xmlPullParser){

listener.onReaponse(xmlPullParser);

  }

}

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击