本实例只介绍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 param, ArrayList value,
Listener listener, ErrorListener errorListener, Priority priority) {
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 getHeaders() throws AuthFailureError {
Map map = new HashMap();
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 Parameters, ArrayList ParValues)
{
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 + "";
mreakString = mreakString + ts;
}
mreakString = mreakString + "";
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 imageCache = new 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 void addRequest(Request request) {
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 param = new ArrayList();
ArrayList value = new ArrayList();
param.add("account");
param.add("pwd");

value.add(userName);
value.add(DES.encrypt(pwd, Constant.DESKEY));

//成功请求的回调
Listener listener =new 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);
}
}

更多相关文章

  1. Android(安卓)用纯代码实现复杂界面
  2. Android(安卓)利用getIdentifier()方法获取资源ID
  3. 在xml文件的Preference标签中,用给标签加参数
  4. Android(安卓)Netroid解析之——断点续传下载及问题修正
  5. DesiredCapabilities参数大全
  6. Android(安卓)Kotlin intent.getStringExtra("xxx") 获取为 null
  7. android emulator创建avd命令
  8. Android自学笔记-10-Sqlite的简单使用
  9. toolbar自定义右边的菜单注意

随机推荐

  1. Porting Android
  2. Android任务栏的图标显示
  3. 提示:Not targeting the latest versions
  4. Android(安卓)InputStream与String,Byte
  5. Android(安卓)异常:Immutable bitmap pass
  6. Android(安卓)开启闪光灯做手电筒 源码
  7. Android: 判断网络连接状态及连接类型
  8. Forward [To: Android(安卓)Beginners ]
  9. Android(安卓)HTTP GET/POST
  10. Android(安卓)FileProvider