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

来源:互联网 发布:coc加农炮升级数据 编辑:程序博客网 时间:2024/06/05 07:53

MainActivity如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
packagecc.testvolley; 
   
importorg.json.JSONObject; 
importandroid.app.Activity; 
importandroid.app.ProgressDialog; 
importandroid.graphics.Bitmap; 
importandroid.os.Bundle; 
importandroid.support.v4.util.LruCache; 
importandroid.widget.ImageView; 
importcom.android.volley.Request; 
importcom.android.volley.RequestQueue; 
importcom.android.volley.Response; 
importcom.android.volley.VolleyError; 
importcom.android.volley.toolbox.ImageLoader; 
importcom.android.volley.toolbox.ImageLoader.ImageCache; 
importcom.android.volley.toolbox.ImageLoader.ImageListener; 
importcom.android.volley.toolbox.JsonObjectRequest; 
importcom.android.volley.toolbox.NetworkImageView; 
importcom.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
 */ 
publicclass MainActivity extendsActivity { 
    privateImageView mImageView; 
    privateNetworkImageView mNetworkImageView; 
    @Override 
    protectedvoid onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        init(); 
    
       
    privatevoid init(){ 
        mImageView=(ImageView) findViewById(R.id.imageView); 
        mNetworkImageView=(NetworkImageView)findViewById(R.id.networkImageView); 
        getJSONByVolley(); 
        loadImageByVolley(); 
        showImageByNetworkImageView(); 
    
   
    /**
     * 利用Volley获取JSON数据
     */ 
    privatevoid getJSONByVolley() { 
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        String JSONDataUrl = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json"
        finalProgressDialog progressDialog = ProgressDialog.show(this"This is title""...Loading..."); 
   
        JsonObjectRequest jsonObjectRequest = newJsonObjectRequest( 
                Request.Method.GET,  
                JSONDataUrl,  
                null
                newResponse.Listener<JSONObject>() { 
                    @Override 
                    publicvoid onResponse(JSONObject response) { 
                        System.out.println("response="+response); 
                        if(progressDialog.isShowing()&&progressDialog!=null) { 
                            progressDialog.dismiss(); 
                        
                    
                },  
                newResponse.ErrorListener() { 
                    @Override 
                    publicvoid onErrorResponse(VolleyError arg0) { 
                           System.out.println("sorry,Error"); 
                    
                }); 
        requestQueue.add(jsonObjectRequest); 
    
       
       
    /**
     * 利用Volley异步加载图片
     
     * 注意方法参数:
     * getImageListener(ImageView view, int defaultImageResId, int errorImageResId)
     * 第一个参数:显示图片的ImageView
     * 第二个参数:默认显示的图片资源
     * 第三个参数:加载错误时显示的图片资源
     */ 
    privatevoid loadImageByVolley(){ 
        String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        finalLruCache<String, Bitmap> lruCache = newLruCache<String, Bitmap>(20); 
        ImageCache imageCache = newImageCache() { 
            @Override 
            publicvoid putBitmap(String key, Bitmap value) { 
                lruCache.put(key, value); 
            
   
            @Override 
            publicBitmap getBitmap(String key) { 
                returnlruCache.get(key); 
            
        }; 
        ImageLoader imageLoader = newImageLoader(requestQueue, imageCache); 
        ImageListener listener = ImageLoader.getImageListener(mImageView, R.drawable.ic_launcher,R.drawable.ic_launcher); 
        imageLoader.get(imageUrl, listener); 
    
       
    /**
     * 利用NetworkImageView显示网络图片
     */ 
    privatevoid showImageByNetworkImageView(){ 
        String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"
        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        finalLruCache<String, Bitmap> lruCache = newLruCache<String, Bitmap>(20); 
        ImageCache imageCache = newImageCache() { 
            @Override 
            publicvoid putBitmap(String key, Bitmap value) { 
                lruCache.put(key, value); 
            
   
            @Override 
            publicBitmap getBitmap(String key) { 
                returnlruCache.get(key); 
            
        }; 
        ImageLoader imageLoader = newImageLoader(requestQueue, imageCache); 
        mNetworkImageView.setTag("url"); 
        mNetworkImageView.setImageUrl(imageUrl,imageLoader); 
    
   
}
main.xml如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<RelativeLayoutxmlns: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>
0 0