zoukankan      html  css  js  c++  java
  • 安卓新的联网方式 Volley的使用(一)加载图片与 json

    最近刚接触安卓, 以前搞wp ,一对比起来 ,安卓怎么这么麻烦。联网必须要重新开一个线程才可以。而且加载网络图片也很麻烦。。。花了很久一直卡在快速滑动加载网络图片的listview上面 ,一直很纠结痛苦。。。

    but 今天发现了 新的联网方式,感激谷歌啊。Volley 

    忽然发现以前那些 HttpClient或者HttpUrlConnection 都去死吧 。。还是你好用啊。。

    用法  

    ImageVIew 加载图片

    核心ImageRequest

    1首先  

    private RequestQueue mQueue;       

    2在OnCreate方法中对其进行初始化

    mQueue = Volley.newRequestQueue(this); 

    3   创建ImageRequest对象,并将其添加到mQueue

    public void readBitmapViaVolley(String imgUrl, final ImageView imageView) {
    		ImageRequest imgRequest = new ImageRequest(imgUrl,
    				new Response.Listener<Bitmap>() {
    					@Override
    					public void onResponse(Bitmap arg0) {
    						// TODO Auto-generated method stub
    						imageView.setImageBitmap(arg0);
    					}
    				},   //紫色代码 表示  联网成功后的回调
    				300, 
    				200, 
    				Config.ARGB_8888, 
    				new ErrorListener() {
    					@Override
    					public void onErrorResponse(VolleyError arg0) {
    						
    					}
    				});  //联网失败后 的回调。
    		mQueue.add(imgRequest); //添加到mQueue中,完成绑定。
     }

      在上面,我们可以看到,在ImageRequest的构造函数中,我们就可以直接将一些关于Bitmap的参数给传进去了,比如长宽等信息,然后在其返回的Response.Listener中获得返回的结果,就是一个Bitmap了,并在onResponse函数中对ImageView进行设置,最后将其添加到mQueue中。

    上面的代码  和httpclient 与HttpUrlConnection  在多线程中访问图片的效果是一样的,只是代码简洁了很多。。哈哈 再一次感谢谷歌。

    ImageVIew 加载Json

    首先 老样子

    private RequestQueue mQueue;

    mQueue = Volley.newRequestQueue(this); 

    public void getWeatherInfo(){
    	JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(WEATHER_LINK, null, 
    			new Response.Listener<JSONObject>() {
    				@Override
    				public void onResponse(JSONObject arg0) {
    					list.clear();
    					Iterator<String> it = arg0.keys();
    					while(it.hasNext()){
    						String key = it.next();
    						JSONObject obj = null;
    						try {
    							 obj = arg0.getJSONObject(key);
    						} catch (JSONException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
    						if (obj != null) {
    							Iterator<String> objIt = obj.keys();
    							while (objIt.hasNext()) {
    								String objKey = objIt.next();
    								String objValue;
    								try {
    								objValue = obj.getString(objKey);
    								HashMap<String, String> map = new HashMap<String, String>();
    								map.put("title", objKey);
    								map.put("content", objValue);
    								Log.v(TAG, "title = " + objKey + " | content = " + objValue);
    								list.add(map);
    								} catch (JSONException e) {
    									// TODO Auto-generated catch block
    									e.printStackTrace();
    								}
    							}
    						}
    					}
    					Log.v(TAG, "list.size = " + list.size());
    				}			
    			}, new Response.ErrorListener() {
    				@Override
    				public void onErrorResponse(VolleyError arg0) {
    				}
    			});
    	mQueue.add(jsonObjectRequest);
    

      

     根据json 数据的不同  ,可以使用  JsonArrayRequest  或者JsonObjectRequest

  • 相关阅读:
    菜鸟笔记 -- Chapter 6.2.6 内部类
    菜鸟笔记 -- Chapter 6 面向对象
    菜鸟笔记 -- Chapter 6.1 面向对象概述
    菜鸟笔记 -- Chapter 4.7 代码注释与编码规范
    菜鸟笔记 -- Chapter 4 Java语言基础
    小白袍 -- Chapter 1.4.1.1 URL编码的理论解读
    小白袍 -- Chapter 1.1 避不开的编解码
    小白袍 -- Chapter 1 Java中的Encode与Decode
    菜鸟崛起 Ajax
    软件测试
  • 原文地址:https://www.cnblogs.com/zey23/p/3885655.html
Copyright © 2011-2022 走看看