一、HttpTransportSE call 调用抛出异常,主要是由于AndroidManifest.xml文件中
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="18"/>
minSdkVersion>9时,不能在主线程中调用网络服务,要建个子线程Thread,在子线程中调用网络访问。
/**
* 登录系统,成功返回true,失败返回false
*/
public static boolean loginSystem(String userName,String password)
{
try {
//1.实例化SoapObject对象
SoapObject request = new SoapObject(NAMESPACE, LOGINSYSTEM);
//2.如果方法需要参数,设置参数
try{
password = getMD5(password);
}
catch(NoSuchAlgorithmException e)
{
return false;
}
catch(UnsupportedEncodingException e)
{
return false;
}
request.addProperty("UserName", userName);
request.addProperty("Password", password);
request.addProperty("LoginKey", m_loginKey);
//3.设置Soap的请求信息,参数部分为Soap协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;//服务器端为.net
envelope.bodyOut = request;
//4.构建传输对象,5秒超时
HttpTransportSE transport = new HttpTransportSE(APPSERVICEURL,5000);
//transport.debug = true;
//5.访问WebService,第一个参数为命名空间 + 方法名,第二个参数为Envelope对象
List headerProperties = transport.call(NAMESPACE + LOGINSYSTEM, envelope,null);
if (headerProperties==null)
{
b_ServerResponse = false;
return false;
}
//6.解析返回的数据
SoapObject soapObj=(SoapObject) envelope.bodyIn;
if (soapObj==null)
{
b_ServerResponse = false;
return false;
}
b_ServerResponse = true;
String jsonStr=soapObj.getProperty(0).toString();
try
{
JSONObject jsonObj = new JSONObject(jsonStr);
int code = jsonObj.getInt("code");
m_msg = jsonObj.getString("msg");
String data = jsonObj.getString("data");
JSONObject jsonData1 = new JSONObject(data);
if (code==0)
{
return false;
}
b_Login = true;
// 若登陆成功,设置cookie
m_Uid = code;
m_userName = userName;
m_cookies = new ArrayList();
for (Object obj : headerProperties)
{
HeaderProperty h = (HeaderProperty) obj;
if ((h.getKey() + "").equalsIgnoreCase("Set-Cookie"))
{
String valueString;
valueString = h.getValue();
valueString = valueString.split(";")[0];
int index = valueString.indexOf("SessionId=");
if (index!=-1)
{
m_sessionId = valueString.substring(index+10);
}
HeaderProperty h1 = new HeaderProperty("Cookie",
valueString);
m_cookies.add(h1);
}
}
return true;
}
catch(JSONException e)
{
}
}
catch (IOException e)
{
e.printStackTrace();
b_ServerResponse = false;
}
catch (XmlPullParserException e)
{
e.printStackTrace();
b_ServerResponse = false;
}
catch (Exception e)
{
e.printStackTrace();
b_ServerResponse = false;
}
return false;
}