开发者社区> 小弟的谷哥> 正文

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

简介: MainActivity如下: package cc.testvolley; import org.json.JSONObject; import 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>


 

PS:

请务必导入Volley.jar

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringMVC 视图解析器 方法返回值 异常处理器
SpringMVC 视图解析器 方法返回值 异常处理器
5 0
iOS 源码分析(二):YYModel
iOS 源码分析(二):YYModel
8 0
比赛-以企业为服务目标的政策大数据应用
比赛-以企业为服务目标的政策大数据应用
4 0
SwiftUI—使用WebKit里的网页视图
SwiftUI—使用WebKit里的网页视图
4 0
IDEA安装及使用详细教程
IDEA安装及使用详细教程
4 0
基于 R 语言的科研论文绘图技巧详解(3)
在查阅文献的过程中,看到了几幅非常不错的出版图,今天就跟着小编一起学习下,他们是怎么使用 R 绘制出来的。
5 0
Tomcat - 安装 & 配置(Windows)
Tomcat - 安装 & 配置(Windows)
8 0
神策杯 2018高校算法大师赛(个人、top2、top6)方案总结(上)
神策杯 2018高校算法大师赛(个人、top2、top6)方案总结(上)
5 0
文本点击率预估挑战赛-冠亚季军方案总结(上)
文本点击率预估挑战赛-冠亚季军方案总结(上)
4 0
+关注
小弟的谷哥
welcome
766
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载