如何从android应用程序向Soap服务(ASMX服务)中的flag enum参数传递值
我想在android应用程序中调用一个soap web服务,它需要一个枚举值作为参数,它是一个标志枚举。如何从android应用程序将一些值作为标志枚举传递给此web服务方法 我使用Ksoap调用soap服务 它的web服务方法:如何从android应用程序向Soap服务(ASMX服务)中的flag enum参数传递值,android,web-services,soap,enums,asmx,Android,Web Services,Soap,Enums,Asmx,我想在android应用程序中调用一个soap web服务,它需要一个枚举值作为参数,它是一个标志枚举。如何从android应用程序将一些值作为标志枚举传递给此web服务方法 我使用Ksoap调用soap服务 它的web服务方法: [WebMethod] public ReceptionCommitResult CommitReceiption(some parameters, EnumName myEnum) { //mehod body } 和web
[WebMethod]
public ReceptionCommitResult CommitReceiption(some parameters, EnumName myEnum)
{
//mehod body
}
和web服务枚举:
[Flags]
public enum EnumName
{
One= 0,
Two = 1,
Three = 2,
Four = 4,
Five = 8,
}
最后,调用服务的me代码:
SoapObject soapObj = new SoapObject(ServiceUtil.WSDL_TARGET_NAMESPACE, "RCI");
AttributeInfo attrInfo = new AttributeInfo();
attrInfo.setName("myEnum");
attrInfo.setValue("");
attrInfo.setType(EnumName.class);
soapObj.addAttribute(attrInfo);
SoapSerializationEnvelope _envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
_envelope.skipNullProperties = false;
_envelope.implicitTypes = true;
_envelope.dotNet = true;
_envelope.setOutputSoapObject(_client);
_envelope.bodyOut = _client;
_envelope.addMapping(WSDL_TARGET_NAMESPACE, "RCI",new MyClassObject().getClass());
HttpTransportSE httpTransport1 = new HttpTransportSE(ServiceUtil.SOAP_ADDRESS, 60000000);
httpTransport1.debug = true;
httpTransport1.call(ServiceUtil.SOAP_ACTION, _envelope);
在C#中,枚举标志通常在内部表示为32/64位整数。所以通常只需要将枚举值强制转换为整数值并传递给webservice
也许你需要试试这样的东西:
AttributeInfo attrInfo = new AttributeInfo();
attrInfo.setName("myEnum");
attrInfo.setValue("5"); //For a value of Two | Four
attrInfo.setType(EnumName.class);
soapObj.addAttribute(attrInfo);
public enum EnumName {
One(1),Two(2),Three(3);
public final int value;
MyEnum(final int value) {
this.value = value;
}
}
您可以这样使用它:
AttributeInfo attrInfo = new AttributeInfo();
attrInfo.setName("myEnum");
attrInfo.setValue("5"); //For a value of Two | Four
attrInfo.setType(EnumName.class);
soapObj.addAttribute(attrInfo);
public enum EnumName {
One(1),Two(2),Three(3);
public final int value;
MyEnum(final int value) {
this.value = value;
}
}
要获取值,请执行以下操作:
EnumName e = EnumName.One;
int value = e.value; //= 1
String name = e.name(); // = "One"
要具有on属性,请执行以下操作:
EnumName e = EnumName.One;
AttributeInfo attrInfo = new AttributeInfo();
attrInfo.setName(e.name());
attrInfo.setValue(e.value); //For a value of Two | Four
attrInfo.setType(EnumName.class);
soapObj.addAttribute(attrInfo);
还有一个类似的问题,要解决这个问题,请看一下