我做了很多研究并试图解决它,但是我面临着在屏幕上显示响应的问题。
肥皂服务代码为:
POST /ws1.asmx HTTP/1.1
Host: www.xyz.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://xyx.com/webservices/LoadServices"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<LoadServices xmlns="http://xyz.com/webservices/" />
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<LoadServicesResponse xmlns="http://xyz.com/webservices/">
<LoadServicesResult>
<anyType />
<anyType />
</LoadServicesResult>
</LoadServicesResponse>
</soap:Body>
</soap:Envelope>
我在Java中使用2类。这是它的代码。
首先,我添加Category.java代码:
import java.util.Hashtable;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
import android.util.Log;
public class Category implements KvmSerializable
{
public int CompanyId; //0
public int ServiceId; //1
public String ServiceMessage; //2
public int ServiceCategoryId; //3
public boolean IsVisibleForUser; //4
public String ServiceName; //5
public String Serviceform; //6
public char IsActive; //7
public String ServiceImage; //8
public String ServiceCode; //9
public String RequestFulfilledMsg; //10
public String ToDoPendingRequest; //11
public String CompanyName; //12
public String ServiceCategoryName; //13
public String ThumbnailImage; //14
public String ServiceDescription; //15
public Category()
{}
public Category(int coid, int servId, int scid)
{
CompanyId = coid;
ServiceId = servId;
ServiceCategoryId = scid;
}
public Object getProperty(int arg0)
{
Log.i("Category", "msg:getProperty");
switch(arg0)
{
case 0:
return CompanyId;
case 1:
return ServiceId;
case 3:
return ServiceCategoryId;
}
return null;
}
public int getPropertyCount()
{
Log.i("Category", "msg:getPropertyCount(3)");
return 3;
}
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info)
{
Log.i("Category", "msg:getPropertyInfo");
switch (index)
{
case 0:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "CompanyId";
break;
case 1:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "ServiceId";
break;
case 3:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "ServiceCategoryId";
break;
default:
break;
}
}
public void setProperty(int index, Object value)
{
Log.i("Category", "msg:SetProperty");
switch (index)
{
case 0:
CompanyId = Integer.parseInt(value.toString());
break;
case 1:
ServiceId = Integer.parseInt(value.toString());
break;
case 3:
ServiceCategoryId = Integer.parseInt(value.toString());
break;
default:
break;
}
}
}
现在是根活动的代码,即WebServiceEx.java
public class WebServiceEx extends Activity
{
private final String NAMESPACE = "http://xyz.com/webservices/";
private final String URL = "http://www.abc.com/ws1.asmx";
private final String SOAP_ACTION = "http://xyz.com/webservices/LoadServices";
private final String METHOD_NAME = "LoadServices";
//public Array array = null;
//String arr[] = null;
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tv = new TextView(this);
LoadSoapService();
setContentView(tv);
}
private void LoadSoapService()
{
Log.i("WebService", "msg:soap enter");
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
Category C = new Category();
C.ServiceCategoryId = 1;
Log.i("WebService", "msg:Category");
Log.i("WebService", "msg:Property");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
Log.i("WebService", "msg:Request");
envelope.addMapping(NAMESPACE, "Category", new Category().getClass());
HttpTransportSE transportSE = new HttpTransportSE(URL);
Log.i("WebService", "msg:try_out");
try
{
Log.i("WebService", "msg:try+in");
transportSE.call(SOAP_ACTION, envelope);
Log.i("WebService", "msg:SoapObject");
SoapObject response = (SoapObject)envelope.getResponse(); /**error here, wents to exception **/
Log.i("WebService", "Response");
Log.i("WebSrv", response.toString());
C.ServiceCategoryId = Integer.parseInt(response.getProperty(3).toString());
tv.setText(" "+C.ServiceCategoryId);
}
catch (Exception e)
{
e.printStackTrace();
Log.i("WebService", "msg:Exception error");
}
}
}
我在发生问题的地方添加了注释,此外,如果我错过了什么,请告诉我,因为一切都在您的面前。
我已经将ksoap2添加到了外部Jar中,并且添加了Internet权限,我所遇到的只是空白屏幕。
希望有一些想法,
谢谢,
哈普雷特。
最佳答案
如果我是你,我会
private void LoadSoapService()
该方法如下:
private String LoadSoapService()
返回
Integer.parseInt(response.getProperty(3).toString());
并将TextViews文本设置为
tv.setText(LoadSoapService);
关于android - 在Android中显示肥皂响应(数组),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9176491/