Android使用Google推荐的联网框架Volley,让连接网络更加简单

大家好,随着技术的进步,科技的发达,很少有应用是单机的了,大部分都需要联网访问服务器,以前我们都用

httpclient和httpurlconnection,感觉是不是非常麻烦,而Google特别为开发者考虑,推出了Volley,从此妈妈再也不担心我的联网问题了,哪里联不上联哪里,Volley让联网更容易和更快,并且Volley请求会异步执行,不阻挡主线程联网请求无非就是Get或者Post,我们很少用到DELETE这个请求方式,说了这么多废话,下面让我们看看Volley到底能干啥。它真的有这么神奇吗,芝麻开门,让我们一起来探索Volley
吧!

一:Volley提供的功能

1、封装了的异步的RESTful 请求API;

2、一个优雅和稳健的请求队列;

3、一个可扩展的架构,它使开发人员能够实现自定义的请求和响应处理机制;

4、能够使用外部HTTP Client库;

5、缓存策略;

6、自定义的网络图像加载视图(NetworkImageView,ImageLoader等);

二:为什么使用异步HTTP请求?

Android中要求HTTP请求异步执行,如果在主线程执行HTTP请求,可能会抛出android.os.NetworkOnMainThreadException  异常。阻塞主线程有一些严重的后果,它阻碍UI渲染,用户体验不流畅,它可能会导致可怕的ANR(Application Not Responding)。要避免这些陷阱,作为一个开发者,应该始终确保HTTP请求是在一个不同的线程。

三:正文Volley的Get和Post方法

首先我们要使用Volley要把Volley.jar导入我们的项目中,如图:

这样我们就可以使了,让我们来看看Get和Post代码,如下:

package com.zqy.myvolley;

import java.util.HashMap;
import java.util.Map;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.Request.Method;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import android.app.Activity;

public class MainActivity extends Activity implements OnClickListener {
	private RequestQueue mQueue;
	String url="http://www.baidu.com";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mQueue=Volley.newRequestQueue(this);<span style="color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; line-height: 28px;">创建一个RequestQueue对象。</span>
		initView();
	}

	private void initView(){
		final Button btnGet=(Button) findViewById(R.id.btn_get);
		final Button btnPost=(Button) findViewById(R.id.btn_post);
		btnGet.setOnClickListener(this);
		btnPost.setOnClickListener(this);

	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_get:
			initGet();
			break;
		case R.id.btn_post:
			initPost();
			break;
		default:
			break;
		}

	}
	private void initGet(){//Get请求   Method为GET
		mQueue.add(new StringRequest(Method.GET,url, new Listener<String>() {
			@Override
			public void onResponse(String arg0) {
				Toast.makeText(MainActivity.this, "Get请求成功", 2).show();
				//成功,在这里写处理内容的代码
			}
		}, new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError arg0) {
				Toast.makeText(MainActivity.this, "Get请求失败", 2).show();
				//失败
			}

		}));
	}
	private void initPost(){//Post请求
		//这写你自己的内部类PostResquest。。。。Method改成POST
		mQueue.add(new PostResquest(Method.POST,url, new Listener<String>() {
			@Override
			public void onResponse(String arg0) {
				Toast.makeText(MainActivity.this, "Post请求成功", 2).show();
				//成功,在这里写处理内容的代码
			}
		}, new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError arg0) {
				Toast.makeText(MainActivity.this, "Post请求失败", 2).show();
				//失败
			}

		}));
	}
	//写个内部类,Post里面放一些服务器需要的参数
	class PostResquest extends StringRequest {

		public PostResquest(int method, String url,
				Listener<String> listener, ErrorListener errorListener) {
			super(method, url, listener, errorListener);
		}

		protected Map<String, String> getParams() throws AuthFailureError {
			Map<String, String> params = new HashMap<String, String>();
			params.put("Name", "小源");//参数
			params.put("Age",22+"");//参数
			return params;
		}
	}

}

这就是联网的代码了,是不是特别简单,比httpclient和httpurlconnection简单很多,并且还是异步执行,根本无需Handler。让我们开发更便捷,更简单,更高效,在让我们看看XML里面的布局,里面我放了两个Button,一个执行Get方法,一个执行Post方法。如下:

<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"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_get"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="28dp"
        android:text="Get请求" />

    <Button
        android:id="@+id/btn_post"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btn_get"
        android:layout_below="@+id/btn_get"
        android:layout_marginTop="47dp"
        android:text="Post请求" />

</RelativeLayout>

OK.大功告成,是不是感觉很简单,看完这些代码,你是不是也打算跟httpclient和httpurlconnection
say goodbye了跟Volley say hello那。最后祝愿安卓系统越做越好,让我们Android必胜宝刀行走在科技的世界里吧,Yeah~~~~

让我们看看效果图,附Volley宣传图片一张!Go Go,回家,外面要下雨了!

对了,差点忘了,千万不要了加联网的权限。要不会报错的!

<uses-permission android:name="android.permission.INTERNET" >

咦,Post怎么请求失败了,在手机上是成功的,我参数是瞎拼的!正好做个反面失败的案列,真是天助我也啊!

真走了!下雨了!

源码下载

Android使用Google推荐的联网框架Volley,让连接网络更加简单,布布扣,bubuko.com

时间: 2024-10-10 11:01:06

Android使用Google推荐的联网框架Volley,让连接网络更加简单的相关文章

GoogleIO 2013 Android快速联网框架Volley介绍

最近调研Android开发框架,看了xutils,KjFramework等框架的HTTP模块,觉得都太简单了,只是简单封装了HttpUrlConnenction和Handler,加了个回调函数,感觉就是比自己写一个好一点点.后面发现了Volley这个比较靠谱的Android网络请求框架,就用它了. Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. 这是Volley名称的由来: a burst or emission of many things or a lar

android 连接网络的简单实例

1.android有两种连接网络的类HttpURLConnect和HttpClient,但是HttpClient已逐渐被HttpURLConnect类代替所以就不提及. 2.实例 String address = "http://www.baidu.com"; URL url = new URL(address);//将String类型转化成URL类型 HttpURLConnect con = (HttpURLConnect)url.openConnection();//创建一个指向要

【Android进阶】(2)使用开源框架Volley

1. 框架特点 (1). 通信更快,更简单 (2). Get.Post网络请求及网络图像的高效率异步处理请求 (3). 排序 (4). 网络请求的缓存 (5). 多级别取消请求 (6). 和Activity生命周期的联动 缺点:不适合上传和下载 优点:高效的Get/Post方式的数据请求交互,网络图片加载和缓存,是谷歌官方推出的框架,性能很稳定和强劲. 2. 网络数据请求 (1). 使用Get方式请求数据 创建Application类: <span style="white-space:p

Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在 这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的

[转]Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

初探Google推荐Android图片加载框架Glide

简介 运行Demo 安装依赖包 现在编译好的依赖 Gradle Maven Proguard 简单使用 设置暂未图和加载失败图 加载封面图 从其他路径加载图片 加载图片到其他控件 调试信息 开启请求响应信息 开启工作流日志 简介 现在在Android上加载图片的框架都已经烂大街了,所以我们这里也不说谁好谁坏,当然也不做比较了,因为得出的结果都是片面的,没有谁好谁坏只有适不适合需求罢了 起因是在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个叫Glide 的图片加载库,作者是bumptech.这个

Android网络框架Volley

Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp 他们各有优劣,之前个人则比较喜欢用Android-async-http, 如今Google推出了官方的针对Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,Volley在提供了高性能网络通讯功能的同时,对网络图片加载也提供了良好的支持,完全可以满足简单REST客户端的需求, 我们

Android 谷歌 开源 通信框架 VOLLEY(一)

HTTP 是应用层协议,TCP 是传输层协议(位于应用层之下). 一般来说,移动应用推荐使用 HTTP 协议,有很多优点: 1. HTTP 发展成熟 HTTP 几乎已经快成为一种通用的 Web 标准,Web Services.Open API 等等都是基于 HTTP 协议的.几乎所有数据的传输(多媒体.XML.JSON)都可以采用 HTTP. 2. 后台复用 因为很多应用,除了有移动端,还有Web端,甚至桌面端.Web 版中前后台交互,无论是页面请求还是AJAX 请求,都是采用标准 HTTP 协