android volley 调用webService
本实例只介绍Volley 如何调用webService 的,至于Volley 的使用求请参考 https://www.jianshu.com/p/338fcc95ce2f
实例文件说明: 本实例共3文件
VolleyCallWebService.java 文件生成请求参数
VolleySingleton.java 获取Volley实例
1. VolleyCallWebService.java 文件
/*** 生成对WebService 请求的请求内容
* @author Administrator
*/
public class VolleyCallWebService extends StringRequest{
public byte[] mRequestData;
public String mSoapAction;
private Priority mPriority;
public VolleyCallWebService(String methodName, ArrayList
Listener
super(Method.POST,Constant.WEBSERVICE, listener, errorListener);
mSoapAction = "http://tempuri.org/" + methodName;
mRequestData = getRequestData(methodName,param,value);
mPriority = priority;
}
@Override
public com.android.volley.Request.Priority getPriority() {
return mPriority;
}
/**
* 获取http请求头参数
*/
@Override
public Map
Map
map.put("Content-Length", String.valueOf(mRequestData.length));
map.put("SOAPAction", mSoapAction);
return map;
}
/**
* 获取http 请求的请求体数据
*/
@Override
public byte[] getBody() throws AuthFailureError {
return mRequestData;
}
/**
* 获取http请求体的类型
*/
@Override
public String getBodyContentType() {
return "text/xml; charset=utf-8";
}
/**
* @summary 获取请求数据(格式的生成参考soap1.0 协议)
* @param methodName web接口的函数名称
* @param Parameters web接口的参数名字
* @param ParValues web接口的参数值
* @return 返回soap格式的请求数据
*/
private byte[] getRequestData(String methodName,
ArrayList
{
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "
+ "
String tps, vps, ts;
String mreakString = "";
mreakString = "<" + methodName + " xmlns=\"http://tempuri.org/\">";
for (int i = 0; i < Parameters.size(); i++) {
tps = Parameters.get(i).toString();
// 设置该方法的参数为.net webService中的参数名称
vps = ParValues.get(i).toString();
ts = "<" + tps + ">" + vps + "" + tps + ">";
mreakString = mreakString + ts;
}
mreakString = mreakString + "" + methodName + ">";
String soap2 = "
String requestData = soap + mreakString + soap2;
byte[] bytes = null;
try {
bytes = requestData.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return bytes;
}
}
2. VolleySingleton.java 文件 (单例模式创建一个Volley 请求队列)
public class VolleySingleton {
private Context mContext;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static VolleySingleton mVolleySingleton;
private VolleySingleton(Context context) {
mContext = context;
mRequestQueue = getRequestQueue();
long appMemorySize =Runtime.getRuntime().maxMemory()/1024;
final int cacheSize = (int) (appMemorySize/8);
mImageLoader = new ImageLoader(mRequestQueue, new ImageCache() {
LruCache
cacheSize);
@Override
public void putBitmap(String url, Bitmap bitmap) {
imageCache.put(url, bitmap);
}
@Override
public Bitmap getBitmap(String url) {
return imageCache.get(url);
}
});
}
/**
* @summary 创建一个单例实例
* @context 应用程序的上下文
* @Return 返回 VolleySingleton 实例
*/
public synchronized static VolleySingleton getVolleyInstance(Context context) {
if (mVolleySingleton == null) {
mVolleySingleton = new VolleySingleton(context);
}
return mVolleySingleton;
}
/**
* @summary 获取请求队列
* @return 返回请求队列
*/
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mContext);
}
return mRequestQueue;
}
/**
* @summary 添加请求
* @param request
*/
public
mRequestQueue.add(request);
}
/**
* @summary 返回ImageLoader
* @return ImageLoader实例
*/
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
3.CallWebService.java 通过volley调用webService
public class CallWebService {
private void call(String userName ,String pwd,Context context)
{
//webService 方法名称
String methodName ="login";
//添加方法参数
ArrayList
ArrayList
param.add("account");
param.add("pwd");
value.add(userName);
value.add(DES.encrypt(pwd, Constant.DESKEY));
//成功请求的回调
Listener
@Override
public void onResponse(String response) {
if(response != null)
{
}
}
};
//请求失败回调
ErrorListener errorListener = new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
};
//把请求添加到Volley 请求队列里
VolleyCallWebService request = new VolleyCallWebService(methodName, param, value, listener, errorListener, Priority.NORMAL);
VolleySingleton volleySingleton = VolleySingleton.getVolleyInstance(context.getApplicationContext());
volleySingleton.addRequest(request);
}
}
更多相关文章
- Android(安卓)用纯代码实现复杂界面
- Android(安卓)利用getIdentifier()方法获取资源ID
- 在xml文件的Preference标签中,用给标签加参数
- Android(安卓)Netroid解析之——断点续传下载及问题修正
- DesiredCapabilities参数大全
- Android(安卓)Kotlin intent.getStringExtra("xxx") 获取为 null
- android emulator创建avd命令
- Android自学笔记-10-Sqlite的简单使用
- toolbar自定义右边的菜单注意