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

Posted clnchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

   

















以上是关于Android-Volley网络通信框架(StringRequest &amp; JsonObjectRequest)的主要内容,如果未能解决你的问题,请参考以下文章

Android Volley

Android-Volley:尝试从真实设备连接时出现 TimeOutError

Android-Volley

Android-Volley:为JsonArrayRequest设置HTTP标头

2.Ray-消息发布器与消息存储器

集合框架练习12