Android利用Volley异步加载数据(JSON和图片)完整示例

MainActivity如下:
package cc.testvolley; 
   
import org.json.JSONObject; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.v4.util.LruCache; 
import android.widget.ImageView; 
import com.android.volley.Request; 
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.ImageLoader.ImageListener; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.NetworkImageView; 
import com.android.volley.toolbox.Volley; 
   
/**
 * Demo描述: 
 * 1 利用Volley获取JSON数据
 * 2 利用Volley异步加载图片
 * 1 利用NetworkImageView加载网路图片
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/t12x3456/article/details/9221611
 * 2 http://blog.csdn.net/xyz_lmn/article/details/12063561
 * 3 http://blog.csdn.net/lfdfhl/article/details/12221875
 *   Thank you very much
 */ 
public class MainActivity extends Activity { 
    private ImageView mImageView; 
    private NetworkImageView mNetworkImageView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        init(); 
    } 
       
    private void init(){ 
        mImageView=(ImageView) findViewById(R.id.imageView); 
        mNetworkImageView=(NetworkImageView)findViewById(R.id.networkImageView); 
        getJSONByVolley(); 
        loadImageByVolley(); 
        showImageByNetworkImageView(); 
    } 
   
    /**
     * 利用Volley获取JSON数据
     */ 
    private void getJSONByVolley() { 
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        String JSONDataUrl = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json"; 
        final ProgressDialog progressDialog = ProgressDialog.show(this, "This is title", "...Loading..."); 
   
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( 
                Request.Method.GET,  
                JSONDataUrl,  
                null, 
                new Response.Listener<JSONObject>() { 
                    @Override 
                    public void onResponse(JSONObject response) { 
                        System.out.println("response="+response); 
                        if (progressDialog.isShowing()&&progressDialog!=null) { 
                            progressDialog.dismiss(); 
                        } 
                    } 
                },  
                new Response.ErrorListener() { 
                    @Override 
                    public void onErrorResponse(VolleyError arg0) { 
                           System.out.println("sorry,Error"); 
                    } 
                }); 
        requestQueue.add(jsonObjectRequest); 
    } 
       
       
    /**
     * 利用Volley异步加载图片
     * 
     * 注意方法参数:
     * getImageListener(ImageView view, int defaultImageResId, int errorImageResId)
     * 第一个参数:显示图片的ImageView
     * 第二个参数:默认显示的图片资源
     * 第三个参数:加载错误时显示的图片资源
     */ 
    private void loadImageByVolley(){ 
        String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"; 
        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); 
        ImageListener listener = ImageLoader.getImageListener(mImageView, R.drawable.ic_launcher,R.drawable.ic_launcher); 
        imageLoader.get(imageUrl, listener); 
    } 
       
    /**
     * 利用NetworkImageView显示网络图片
     */ 
    private void showImageByNetworkImageView(){ 
        String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"; 
        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); 
        mNetworkImageView.setTag("url"); 
        mNetworkImageView.setImageUrl(imageUrl,imageLoader); 
    } 
   
}


main.xml如下:

<RelativeLayout 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" 
     > 
   
    <com.android.volley.toolbox.NetworkImageView 
        android:id="@+id/networkImageView" 
        android:layout_width="120dip" 
        android:layout_height="120dip" 
        android:layout_centerHorizontal="true" 
        android:layout_marginTop="30dip" 
    /> 
       
     <ImageView 
        android:id="@+id/imageView" 
        android:layout_width="120dip" 
        android:layout_height="120dip" 
        android:layout_centerInParent="true" 
    /> 
   
</RelativeLayout>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值