Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从android应用程序向Soap服务(ASMX服务)中的flag enum参数传递值_Android_Web Services_Soap_Enums_Asmx - Fatal编程技术网

如何从android应用程序向Soap服务(ASMX服务)中的flag enum参数传递值

如何从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

我想在android应用程序中调用一个soap web服务,它需要一个枚举值作为参数,它是一个标志枚举。如何从android应用程序将一些值作为标志枚举传递给此web服务方法

我使用Ksoap调用soap服务

它的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);
还有一个类似的问题,要解决这个问题,请看一下