首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的表现就不尽如人意。
在app开发中,我们最常见的就是从app客户端向服务端发一个http请求.对于两种基本的web请求方式get和post来说,get请求方式相对比较简单,在此略过不表.本文重点描述一下通过volley进行几种post提交的方式.
1.客户端以普通的post方式进行提交,服务端返回字符串
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "response -> " + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
}) {
@Override
protected Map<String, String> getParams() {
//在这里设置需要post的参数
Map<String, String> map = new HashMap<String, String>();
map.put("name1", "value1");
map.put("name2", "value2");
return params;
}
};
requestQueue.add(stringRequest);
2.客户端以json串的post请求方式进行提交,服务端返回json串
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
Map<String, String> map = new HashMap<String, String>();
map.put("name1", "value1");
map.put("name2", "value2");
JSONObject jsonObject = new JSONObject(params);
JsonRequest<JSONObject> jsonRequest = new JsonObjectRequest(Method.POST,httpurl, jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "response -> " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
})
{
//注意此处override的getParams()方法,在此处设置post需要提交的参数根本不起作用
//必须象上面那样,构成JSONObject当做实参传入JsonObjectRequest对象里
//所以这个方法在此处是不需要的
// @Override
// protected Map<String, String> getParams() {
// Map<String, String> map = new HashMap<String, String>();
// map.put("name1", "value1");
// map.put("name2", "value2");
// return params;
// }
@Override
public Map<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "application/json");
headers.put("Content-Type", "application/json; charset=UTF-8");
return headers;
}
};
requestQueue.add(jsonRequest);
看了上面这段代码,会觉得volley这个框架实在是还不够完善,使用JsonObjectRequest对象提交一个post请求,如果有参数需要提交,就必须以JSONObject的json串方式提交.
如果服务端并不支持这种方式呢?比如常见的spring mvc服务端,就很难支持json的请求方式.
那么我们想实现这个目标,就需要使用下面给出的办法.
3.客户端以普通的post方式进行提交,服务端返回json串
首先在Activity类里,继承Request实现一个NormalPostRequest类
private class NormalPostRequest extends Request<JSONObject> {
private Map<String, String> mMap;
private Listener<JSONObject> mListener;
public NormalPostRequest(String url, Listener<JSONObject> listener,ErrorListener errorListener, Map<String, String> map) {
super(Request.Method.POST, url, errorListener);
mListener = listener;
mMap = map;
}
//mMap是已经按照前面的方式,设置了参数的实例
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return mMap;
}
//此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
@Override
protected void deliverResponse(JSONObject response) {
mListener.onResponse(response);
}
}
接下来的调用方式和前面差不多,生成一个Request实例,加入队列中即可.
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
Request<JSONObject> request = new NormalPostRequest(httpurl,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "response -> " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
}, params);
requestQueue.add(request);
以上代码在android 4.3环境下测试通过.
分享到:
相关推荐
- `volley.jar`:这是Volley框架的核心库,包含了所有Volley的类和方法,可以直接添加到Android项目的libs目录下,通过添加依赖进行使用。 - 源码:源码文件通常包含所有Volley的类和方法,开发者可以通过阅读源码...
在Android开发中,Volley是一个高效且易于...总结起来,Android的Volley框架为开发者提供了一种方便、高效的网络请求解决方案,包括POST请求的实现。通过合理的配置和使用,可以极大地提升应用的网络性能和用户体验。
3. **请求队列管理**:Volley提供了一种简单的方式来管理并发请求,自动控制请求的优先级和取消操作。 4. **数据解析**:Volley支持多种数据格式,如JSON、XML等,提供了方便的数据解析工具,使得开发者无需手动...
Volley是Google推出的一款高效的Android网络请求库,它旨在简化Android应用中的网络操作,并优化了性能,特别是对于图像加载和UI更新。这个框架的核心设计理念是快速响应和低延迟,非常适合处理大量的小数据请求,...
1. **创建请求管理器**:封装Volley的RequestQueue,提供发送GET、POST请求的简便方法,并添加取消请求的功能。 2. **图像加载工具类**:封装Universal Image Loader,提供加载、缓存和显示图片的通用方法,例如`...
例如,通过简单地调用框架提供的方法,就可以发起GET或POST请求,处理返回的数据,以及异常情况。 在实际应用中,"Android网络交互框架"可能会包含以下功能: - 请求构建:提供API创建HTTP请求,支持GET、POST以及...
本示例着重介绍两种流行的HTTP网络请求框架——Volley和AsyncHttp,它们都为Android开发者提供了便捷的网络通信解决方案。 首先,我们来详细了解Volley。Volley是Google官方推出的网络库,主要针对Android平台设计...
如上文代码所示,使用HttpURLConnection进行GET和POST请求非常直观。GET方式直接构建URL,而POST方式需要设置请求头并写入请求参数。这两种方法都需要设置超时时间、连接和关闭连接,以防止请求无响应或资源泄漏。...
Volley是一款由Google开发的Android网络请求库,其设计目标是提供一个轻量级、高效且易于使用的网络请求框架。这个“volley.jar.zip”文件包含的就是Volley库的源码Jar包,允许开发者深入理解Volley的工作原理,并在...
除了基本的GET和POST请求,我们还需要关注以下几点: - **网络请求异步处理**:在Android中,网络请求应在后台线程进行,以避免阻塞主线程。可以使用AsyncTask、Handler、Runnable+Thread或第三方库如Retrofit、...
本项目“自定义网络请求,对网络请求的简单封装”旨在提供一种通用的解决方案,使得在网络请求框架变更时,应用的核心逻辑能够保持稳定,减少因更换库而带来的代码修改工作。 首先,我们需要理解网络请求的基本概念...
- 请求体:如果使用POST请求,通常会将数据放在请求体中,以XML或JSON格式发送。 2. **SOPA协议的响应结构**: 响应也由几个部分组成: - 状态码:表示服务器处理请求的结果,如200表示成功,404表示未找到资源...
在这个场景下,Windows Communication Foundation(WCF)是一种常见的服务框架,用于构建可互操作的分布式系统。本项目"Android WCF调用源码"专注于演示如何在Android应用中调用WCF服务,特别是实现RESTful风格的...
Android提供HttpURLConnection或第三方库如Retrofit、Volley来发送网络请求。在注册和登录过程中,客户端会将用户信息封装为JSON格式并通过HTTP请求发送给服务端,服务端返回确认或错误信息。 4. **Java EE与...
4. Android客户端的网络请求代码,如使用OkHttp发送GET或POST请求。 5. Android客户端的JSON解析和UI绑定代码。 通过这个项目,开发者可以学习到如何在Android和Struts2之间建立有效的数据交互,理解RESTful API的...
创建一个POST请求,将XML文件作为请求体发送。在服务器端,通常会有对应的接口接收并处理这个请求。这里提到的“Web端源码”可能包括了服务器接收、处理文件和返回响应的代码。 在服务器端,如果是JavaWeb应用,...
在这个框架中,封装意味着将网络请求的具体实现细节隐藏起来,而对外提供统一的API,这样开发者无需关心底层网络库的使用方式,只需调用HttpWrapper的接口即可完成网络请求。 该框架的核心设计理念是模块化和插件化...
对于数据库操作,我们可以使用JDBC(Java Database Connectivity)或者ORM(Object-Relational Mapping)框架,如Hibernate,以更加面向对象的方式处理数据库事务。 在MySQL数据库中,我们需要创建一个用户表,包含...
1. **网络请求库**:Android客户端通常会使用像`HttpURLConnection`、`Volley`、`OkHttp`或`Retrofit`这样的网络请求库来与服务器通信。在这个项目中,可能是使用了其中的一种或自定义的解决方案。 2. **JSON解析**...