Android-Volley网络通信框架(StringRequest & JsonObjectRequest)

1.回想

上篇对 Volley进行了简介和对它的学习目的与目标,最后,为学习Volley做了一些准备

2.重点

2.1 RequestQueue 请求队列的建立

2.2 学习 StringRequest和JsonObjectRequest 。

3.RequestQueue 请求队列的建立

新建类 volleyApplication 继承自Application , 使用单例模式创建 请求处理队列, 实现例如以下:

package com.example.volleyHttp;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

import android.app.Application;

public class volleyApplication extends Application {

	/**
	 * 01. 建立  请求队列
	 * 02. 将 请求队列 增加到 AndroidMain.xml中
	 * 03.
	 */

	private static RequestQueue queue;

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		queue=Volley.newRequestQueue(getApplicationContext());
	}

	//入口
	public static RequestQueue getQueue(){
		return queue;
	}

}

这个能够与Activity 发生联动作用。在Activity 退出的时候,能够取消的 网络请求操作(通过 tag实现);以下能够实现:

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		volleyApplication.getQueue().cancelAll("strReqGet");
		super.onStop();
	}

使用的时候须要在 AndroidMainfist.xml 文件中 的 Application 标签下 注冊 刚才的 volleylication:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
      <span style="color:#ff0000;">  android:name="com.example.volleyHttp.volleyApplication"</span>
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

  不要忘记了加入网络权限!

4.StringRequest 的get和post方法

4.1 get 操作

  (1)实例化StringRequest 对象

(2)设置參数:请求方式,URL地址,成功的返回调用。失败的返回调用。

(3)给请求设置 tag。加入到刚才的请求队列 中!

	private void strRequest_get() {
		StringRequest request = new StringRequest(Method.GET,
				HttpPath.getSharedIfo(1), new Listener<String>() {

					@Override
					public void onResponse(String response) {
						// TODO Auto-generated method stub
						Toast.makeText(getApplicationContext(), response,
								Toast.LENGTH_SHORT).show();
						tv.setText(response);
					}
				}, new Response.ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {
						Toast.makeText(getApplicationContext(),
								error.getMessage(), Toast.LENGTH_SHORT).show();
					}
				});

		request.setTag("strReqGet");
		<span style="color:#ff0000;">volleyApplication.getQueue().add(request);</span>
	}

4.2 post 操作

(1)实例化StringRequest 对象

(2)设置參数:请求方式,URL地址,成功的返回调用,失败的返回调用;

(3)Post提交的參数设置:重写 getParams 方法。返回Map集合,将自己主动调用;

(4)请求设置 tag,加入到刚才的请求队列 中!

/**
	 * 01.2 String Requset post 提交数据
	 */
	private void strRequest_post(){
		StringRequest stringRequest=new StringRequest(Method.POST,HttpPath.getSharedIfo_post(),new Listener<String>() {

			@Override
			public void onResponse(String response) {
				// 成功返回数据
				tv.setText(response);
			}
		},new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				//出错
				Toast.makeText(getApplicationContext(),
						error.getMessage(), Toast.LENGTH_SHORT).show();
			}
		}){
			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				// post 提交 重写參数 ,将自己主动 提交參数
				Map<String,String> map=new HashMap<String, String>();
				map.put("id","2");
				return map;
			}
		};

		stringRequest.setTag("strPost");
		volleyApplication.getQueue().add(stringRequest);

	}

5.JsonObjectRequest 的 get和post方法

5.1 get 方法

(1)实例化JsonObjectRequest 对象

(2)设置參数:请求方式,URL地址。參数Jsonrequest 为 null (由于为get请求),成功的返回调用。失败的返回调用;

(3)给请求设置 tag,加入到刚才的请求队列 中。

(4)请求成功后,直接返回 成 JsonObject 对象 。能够直接使用

	/**
	 * 02.jsonobjectRequert get请求
	 */
	private void jsonRequest_get(){
		JsonObjectRequest objectRequest=new JsonObjectRequest(Method.GET,HttpPath.getSharedIfo(1),
				null,new Listener<JSONObject>() {

					@Override
					public void onResponse(JSONObject response) {
						//直接进行 json解析
						try {
							JSONObject jsonObject=new JSONObject(response.getString("data"));
							tv.setText(jsonObject.getString("note"));
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							tv.setText(e.getMessage());
						}
					}
				},new Response.ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {
						//请求失败返回的信息
						tv.setText(error.getMessage());
					}
				});
		objectRequest.setTag("jsonRequest");
		volleyApplication.getQueue().add(objectRequest);
	}

5.2 post 方法

(1)实例化JsonObjectRequest 对象

(2)设置參数:请求方式,URL地址,參数JsonRequest ,成功的返回调用,失败的返回调用。

(3)请求參数设置:通过 JsonObejct 实现 post提交 參数设置 (见演示样例代码)

(4)给请求设置 tag。加入到刚才的请求队列 中。

(5)请求成功后。直接返回 成 JsonObject 对象 ,能够直接使用

	/**
	 * 02.2 jsonObjectRequest post的方式 请求
	 */
   private void jsonRequest_post(){

	  <span style="color:#ff0000;"> //封装请求參数 </span>
	   JSONObject jsonStr=new JSONObject();
	   try {
		jsonStr.put("id","2");
	} catch (JSONException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}

	   JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Method.POST,HttpPath.getSharedIfo_post()
			   ,jsonStr, new Listener<JSONObject>() {

				@Override
				public void onResponse(JSONObject response) {
					// TODO Auto-generated method stub
					JSONObject jsonObject;
					try {
						jsonObject = new JSONObject(response.getString("data"));
						tv.setText(jsonObject.getString("note"));
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}
			},new Response.ErrorListener() {

				@Override
				public void onErrorResponse(VolleyError error) {
					// TODO Auto-generated method stub
					tv.setText(error.getMessage());
				}
			});
	   jsonObjectRequest.setTag("jsonPost");
	   volleyApplication.getQueue().add(jsonObjectRequest);

   }

6.JsonArrayRequest

这个我就不在累赘了,和 JsonObjectResquest 一样 , 仅仅只是返回的是 JsonArray 类型。

7. 注意

RequestQueue 请求队列 在初始化的时候,一定要在 android 配置文件的Application 标签里进行注冊。

使用的时候。注意 导入 包问题,ErrorListener 一定是 Response.ErrorListener;

时间: 2024-08-28 06:33:21

Android-Volley网络通信框架(StringRequest &amp; JsonObjectRequest)的相关文章

Android开发之Volley网络通信框架

今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下使用方法,方便以后VC. Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮.) 功能模块: 1. JSON,图像等的异步下载 --------------------------------------------------------------------------------------- 2. 网络请求的排序(scheduling) ----------------------------

Android应用框架-Volley网络通信框架

1.Volley简介: Volley是Google 推出的 Android 异步网络请求框架和图片加载框架. 在 Google I/O 2013 大会上发布. 2.Volley特点 扩展性强. Android目前提供两种http通信方式:在 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现. 提供简便的图片加载工具.(例如:ImageLoader.它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以

Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存) (2)封装 Response.Listener 和 Response.ErrorListener 回调函数 (3)用法 3.文件夹介绍 3.1 GsonRequset.java 自己定义Gson请求,直接将 Json字符串  实例化为 对象 3.2 VolleyApplicatio

Android 网络通信框架Volley的解析

在2013年Google I/O大会上,Android开发团队公布了一个新的网络通信框架:Volley.它适合处理通信频繁的网络操作,但对于每一次通信的数据量则有较为苛刻的限制.本文将介绍该通信框架的用法(包括使用现成和自定义的Request),并从源码的角度探究其工作机制. 目前,Android系统中用于实现HTTP通信的方式主要有HttpURLConnection和HttpClient两个类[1],而封装了它们的框架主要有AsyncHttpClient和Universal-Image-Loa

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基本介绍

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley Google I/O 2013上.Volley公布了volley.在这之前,我们在程序中须要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader HttpURLConnection A

【转】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简介

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley Google I/O 2013上,Volley发布了volley.在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader HttpURLConnection A