以下是根据自己项目做得简单封装,作为自己的笔记,仅供参考
1.libs中添加jar包
ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
2.app build.gradle中添加
androidTestImplementation files('libs/ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar')
自己做的简单封装
3.HttpSoapUtils
package zz.bole.bl_pl_qsjh.utils;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.Map;
import zz.bole.bl_pl_qsjh.R;
import zz.bole.bl_pl_qsjh.retrofit.NetworkUtil;
public class HttpSoapUtils {
public static void sendPostRequest(String methodName, String endPointurl, String soapActionurl, Map<String, String> mapParams, final ResultHandler resultHandler) {
// 判断网络连接状况
if (resultHandler.isNetDisconnected()) {
resultHandler.onAfterFailure();
return ;
}
resultHandler.onBeforeResult();
//空间名字,和服务器地址一致
String nameSpace = "http://tempuri.org/";
//建立soapheader,用header传UserName和PassWord
Element[] header = new Element[1];
header[0] = new Element().createElement(nameSpace, "CredentialSoapHeader");
Element uname = new Element().createElement(nameSpace, "UserName");
uname.addChild(Node.TEXT, "test");//<UserName>xxx</UserName>
header[0].addChild(Node.ELEMENT, uname);
Element pass = new Element().createElement(nameSpace, "Password");
pass.addChild(Node.TEXT, "123");//<Password>xxx</Password>
header[0].addChild(Node.ELEMENT, pass);
SoapObject so = new SoapObject(nameSpace, methodName);
for (String key : mapParams.keySet()) {
so.addProperty(key, mapParams.get(key));
}
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.headerOut=header;
envelope.bodyOut=so;
envelope.dotNet=true;
envelope.setOutputSoapObject(so);
HttpTransportSE transport=new HttpTransportSE(endPointurl);
try {
transport.call(soapActionurl, envelope);// 调用WebService
} catch (Exception e) {
e.printStackTrace();
}
SoapObject object=(SoapObject)envelope.bodyIn;// 获取返回的数据
if (object == null) {
resultHandler.onServerError();
return;
}
String string = object.getProperty(0).toString();
resultHandler.onResult(string);
}
/**
* 网络请求结果处理类
*
*/
public static abstract class ResultHandler{
Context context;
public ResultHandler(Context context) {
this.context = context;
}
/**
* 判断网络是否未连接
*
* @return
*/
public boolean isNetDisconnected() {
return NetworkUtil.isNetDisconnected(context);
}
/**
* 请求成功之前
*/
public abstract void onBeforeResult();
/**
* 请求成功时
*
* @param t 结果数据
*/
public abstract void onResult(String t);
/**
* 服务器出错
*/
public void onServerError() {
// 服务器处理出错
new Thread(new Runnable() {
@Override
public void run() {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, R.string.net_server_error, Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
/**
* 请求失败后的处理
*/
public abstract void onAfterFailure();
/**
* 请求失败时的处理
*
* @param t
*/
public void onFailure(Throwable t) {
if (t instanceof SocketTimeoutException || t instanceof ConnectException) {
// 连接异常
if (NetworkUtil.isNetworkConnected(context)) {
// 服务器连接出错
Toast.makeText(context, R.string.net_server_connected_error, Toast.LENGTH_SHORT).show();
} else {
// 手机网络不通
Toast.makeText(context, R.string.net_not_connected, Toast.LENGTH_SHORT).show();
}
} else if (t instanceof Exception) {
// 功能异常
Toast.makeText(context, R.string.net_unknown_error, Toast.LENGTH_SHORT).show();
}
}
}
}
4.手机网络监测工具
NetworkUtil
package zz.bole.bl_pl_qsjh.retrofit;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
import zz.bole.bl_pl_qsjh.R;
/**
* 手机网络监测工具
*/
public class NetworkUtil {
/**
* 检测网络连接状态
*
* @param context
* @return
*/
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
/**
* 网络是否未连接
* <p>未连接时给出提示</p>
*
* @param context
* @return boolean 是否连接网络
*/
public static boolean isNetDisconnected(Context context) {
if (!isNetworkConnected(context)) {
toastTest(context);
return true;
}
return false;
}
private static void toastTest(final Context context) {
new Thread(new Runnable() {
@Override
public void run() {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, R.string.net_not_connected, Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
/**
* 判断用户是否连接在wifi下
*
* @param context
* @return
*/
public static boolean isConnectedByWifi(Context context) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
return networkInfo.getType() == ConnectivityManager.TYPE_WIFI ? true : false;
}
return false;
}
}
5.Activity代码具体使用
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
以下需要在子线程中使用
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("code",username);
hashMap.put("password",pwd);
String methodName = "Login";
String endPointurl = urladdress+Urls.BASE_URL; //http://192.168.200.12:8001/TESTService.asmx
String soapActionurl = urladdress+Urls.LOGIN; //http://192.168.200.12:8001/TESTService.asmx/Login
HttpSoapUtils.sendPostRequest(methodName, endPointurl, soapActionurl, hashMap, new HttpSoapUtils.ResultHandler(mContext) {
@Override
public void onBeforeResult() {
}
@Override
public void onResult(String t) {
//对字符串解析操作
}
@Override
public void onAfterFailure() {
}
});
本文介绍了一种在Android应用中使用KSOAP2进行WebService调用的封装方法,包括添加依赖、实现网络请求及结果处理,适用于网络状态检查与数据交互场景。
795

被折叠的 条评论
为什么被折叠?



