Android利用Volley異步加載數據(JSON和圖片)完整示例

jopen 11年前發布 | 155K 次閱讀 Android Android開發 移動開發

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>  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!