Java KSOAP2的SoapObject问题
好的,我正在尝试使用KSOAP2将一个列表对象从ASP传递到Android。我完全能够连接到Web服务,我已经测试过该服务确实会返回一个基本bool,但是我需要该服务返回一个充满登录变量的列表对象。我收到以下错误:soapPrimitiveData()org.ksoap2.SoapFault上的错误无法转换为org.ksoap2.serialization.SoapObject 爪哇:Java KSOAP2的SoapObject问题,java,android,asp.net,list,android-ksoap2,Java,Android,Asp.net,List,Android Ksoap2,好的,我正在尝试使用KSOAP2将一个列表对象从ASP传递到Android。我完全能够连接到Web服务,我已经测试过该服务确实会返回一个基本bool,但是我需要该服务返回一个充满登录变量的列表对象。我收到以下错误:soapPrimitiveData()org.ksoap2.SoapFault上的错误无法转换为org.ksoap2.serialization.SoapObject 爪哇: public class MainActivity extends ActionBarActivity { p
public class MainActivity extends ActionBarActivity {
private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://www.mycompanysURL.net/CompanyService/ReportingService.asmx";
String user_id;
String password;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button signin = (Button) findViewById(R.id.btnLogin);
text = (TextView) findViewById(R.id.txtOut);
signin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText etxt_user = (EditText) findViewById(R.id.txtUser);
user_id = etxt_user.getText().toString();
EditText etxt_password = (EditText) findViewById(R.id.txtPass);
password = etxt_password.getText().toString();
new LoginTask().execute();
}
});
}
private boolean doLogin(String user_id, String password) {
String ip = Utils.getIPAddress(true);
boolean result = false;
final String SOAP_ACTION = "http://tempuri.org/GetLogin";
final String METHOD_NAME = "GetLogin";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("User", user_id);
request.addProperty("Pass", password);
request.addProperty("ip",ip);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
// Make the soap call.
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
// Get the SoapResult from the envelope body.
//Error seems to happen here.
SoapObject resultRequestSOAP = (SoapObject) envelope.bodyIn;
SoapObject root = (SoapObject) resultRequestSOAP.getProperty(0);
SoapObject s_deals = (SoapObject) root.getProperty("FOO_DEALS");
for (int i = 0; i < s_deals.getPropertyCount(); i++)
{
Object property = s_deals.getProperty(i);
if (property instanceof SoapObject)
{
SoapObject category_list = (SoapObject) property;
String LoginID = category_list.getProperty("Login_ID").toString();
String UserID = category_list.getProperty("UserID").toString();
String Login_Access = category_list.getProperty("Login_Access").toString();
String Login_CompID = category_list.getProperty("Login_CompID").toString();
String Login_ProfileID = category_list.getProperty("Login_ProfileID").toString();
String Login_DisplayName = category_list.getProperty("Login_DisplayName").toString();
String Login_CustomerType = category_list.getProperty("Login_CustomerType").toString();
String active = category_list.getProperty("active").toString();
if (active == "1") {
result = true;
text.setText("Logged In");
} else {
text.setText("Not Logged In");
}
}
}
} catch (SocketException ex) {
Log.e("Error : ", "Error on soapPrimitiveData() " + ex.getMessage());
ex.printStackTrace();
} catch (Exception e) {
Log.e("Error : ", "Error on soapPrimitiveData() " + e.getMessage());
e.printStackTrace();
}
return result;
}
private class LoginTask extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(
MainActivity.this);
protected void onPreExecute() {
this.dialog.setMessage("Logging in...");
this.dialog.show();
}
protected Void doInBackground(final Void... unused) {
boolean auth = doLogin(user_id, password);
System.out.println(auth);
return null;
}
protected void onPostExecute(Void result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
}
公共类MainActivity扩展了ActionBarActivity{
私有最终字符串命名空间=”http://tempuri.org/";
私有最终字符串URL=”http://www.mycompanysURL.net/CompanyService/ReportingService.asmx";
字符串用户标识;
字符串密码;
文本查看文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮符号=(按钮)findViewById(R.id.btnLogin);
text=(TextView)findViewById(R.id.txtOut);
signin.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
EditText etxt_user=(EditText)findViewById(R.id.txtUser);
user_id=etxt_user.getText().toString();
EditText etxt_password=(EditText)findviewbyd(R.id.txtPass);
password=etxt_password.getText().toString();
新登录任务().execute();
}
});
}
私有布尔doLogin(字符串用户id、字符串密码){
字符串ip=Utils.getIPAddress(true);
布尔结果=假;
最后一个字符串SOAP_ACTION=”http://tempuri.org/GetLogin";
最终字符串方法\u NAME=“GetLogin”;
SoapObject请求=新的SoapObject(名称空间、方法名称);
请求.addProperty(“用户”,用户id);
request.addProperty(“Pass”,密码);
请求。添加属性(“ip”,ip);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
//进行soap调用。
HttpTransportSE androidHttpTransport=新的HttpTransportSE(URL);
试一试{
调用(SOAP_操作,信封);
//从信封正文获取SoapResult。
//这里似乎发生了错误。
SoapObject resultRequestSOAP=(SoapObject)envelope.bodyIn;
SoapObject根=(SoapObject)resultRequestSOAP.getProperty(0);
SoapObject s_deals=(SoapObject)root.getProperty(“FOO_deals”);
对于(int i=0;i
ASP:
[WebMethod]
公共列表GetLogin(字符串用户、字符串传递、字符串ip)
{
SqlConnection conn=新的SqlConnection(my_db.credentials);
SqlDataReader rdr=null;
列表登录列表=新列表();
bool login\u in\u ok=false;
string date=DateTime.Now.ToString();
字符串UserID1=“”;
字符串Login_ID1=“”;
字符串Login_Access1=“”;
字符串Login_CompID1=“”;
字符串Login_ProfileID1=“”;
字符串Login_DisplayName1=“”;
字符串Login_CustomerType1=“”;
字符串active1=“”;
尝试
{
conn.Open();
SqlCommand cmd=新的SqlCommand(“usp\u用户\u登录”,conn);
cmd.Parameters.Add(新的SqlParameter(“@login”,User));
cmd.Parameters.Add(新的SqlParameter(“@pwd”,Pass));
cmd.Parameters.Add(新的SqlParameter(“@ip_addr”,ip));
cmd.Parameters.Add(新的SqlParameter(“@local_datetime”,date));
cmd.CommandType=CommandType.storedProcess;
rdr=cmd.ExecuteReader();
while(rdr.Read())
{
UserID1=rdr[“UserID”].ToString();
Login_ID1=rdr[“ID”].ToString();
Login_Access1=rdr[“Access”].ToString();
Login_CompID1=rdr[“CompanyID”]。ToString();
Login_ProfileID1=rdr[“ProfileID”].ToString();
Login_DisplayName1=rdr[“Lname”].ToString()+“”+rdr[“FName”].ToString();
Login\u CustomerType1=rdr[“Login\u customer\u type”]。ToString()
[WebMethod]
public List<LoginObject> GetLogin(string User, string Pass, string ip)
{
SqlConnection conn = new SqlConnection(my_db.credentials);
SqlDataReader rdr = null;
List<LoginObject> LoginList = new List<LoginObject>();
bool login_in_ok = false;
string date = DateTime.Now.ToString();
string UserID1 = "";
string Login_ID1 = "";
string Login_Access1 = "";
string Login_CompID1 = "";
string Login_ProfileID1 = "";
string Login_DisplayName1 = "";
string Login_CustomerType1 = "";
string active1 = "";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand("usp_user_login", conn);
cmd.Parameters.Add(new SqlParameter("@login", User));
cmd.Parameters.Add(new SqlParameter("@pwd", Pass));
cmd.Parameters.Add(new SqlParameter("@ip_addr", ip));
cmd.Parameters.Add(new SqlParameter("@local_datetime", date));
cmd.CommandType = CommandType.StoredProcedure;
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
UserID1 = rdr["UserID"].ToString();
Login_ID1 = rdr["ID"].ToString();
Login_Access1 = rdr["Access"].ToString();
Login_CompID1 = rdr["CompanyID"].ToString();
Login_ProfileID1 = rdr["ProfileID"].ToString();
Login_DisplayName1 = rdr["Lname"].ToString() + " " + rdr["FName"].ToString();
Login_CustomerType1 = rdr["login_customer_type"].ToString();
active1 = rdr["Active"].ToString();
}
}
finally
{
if (rdr != null)
{
rdr.Close();
}
if (conn != null)
{
conn.Close();
}
}
login_in_ok = active1 == "1" || active1 == "True" ? true : false;
if (login_in_ok)
{
//Dataset for Andriod Login.
LoginList.Add(new LoginObject
{
Login_ID = Login_ID1,
UserID = UserID1,
Login_Access = Login_Access1,
Login_CompID = Login_CompID1,
Login_ProfileID = Login_ProfileID1,
Login_DisplayName = Login_DisplayName1,
Login_CustomerType = Login_CustomerType1,
active = active1
});
}
else
{
//Empty Set for Android to register
LoginList.Add(new LoginObject
{
Login_ID = "",
UserID = "",
Login_Access = "0",
Login_CompID = "",
Login_ProfileID = "",
Login_DisplayName = "",
Login_CustomerType = "",
active = active1
});
}
return LoginList;
}