2011-05-09 56 views
1

我有以下调用PHP web服务的代码。代码连接到服务,但参数不能很好地传递。该方法只是返回参数,并为下面的代码返回“mm”(基本上它返回第一个参数的第一个字母两次)。使用Android WebService客户端和PHP服务器传递参数的问题

String SOAP_ACTION = "urn:server#userAuth"; 
    String METHOD_NAME = "userAuth"; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    PropertyInfo p1 = new PropertyInfo(); 
    p1.type = PropertyInfo.STRING_CLASS; 
    p1.setName("usr"); 
    p1.setValue("myuser"); 
    p1.setNamespace(NAMESPACE); 
    request.addProperty(p1); 

    PropertyInfo p2 = new PropertyInfo(); 
    p2.type = PropertyInfo.STRING_CLASS; 
    p2.setName("pass"); 
    p2.setValue("xxxxxxxxxxx"); 
    p2.setNamespace(NAMESPACE); 
    request.addProperty(p2);  

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

    envelope.setOutputSoapObject(request); 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.call(SOAP_ACTION, envelope); 

    Object result = (Object)envelope.getResponse(); 
    return result.toString(); 

这里是PHP的服务器代码...

$server = new nusoap_server; 
$server->configureWSDL('server', 'urn:server'); 
$server->wsdl->schemaTargetNamespace = 'urn:server'; 
$server->register('userAuth', 
      array('usr' => 'xsd:string', 'pass' => 'xsd:string'), 
      array('return' => 'xsd:string'), 
      'urn:server', 
      'urn:server#userAuth'); 

function userAuth($value){ 

    $a=$value['usr'].$value['pass']; 

     return $a;  
} 

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 

$server->service($HTTP_RAW_POST_DATA); 

回答

1

好了,所以我终于做到了通过在SoapObject女巫的另一个实例添加参数工作将由请求SoapObject PE叫。最终的代码是:

String SOAP_ACTION =“userAuth”; String METHOD_NAME =“userAuth”;

SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapObject parameters = new SoapObject(NAMESPACE, METHOD_NAME); 
    parameters.addProperty("usr", "myuser"); 
    parameters.addProperty("pass", "xxxxxxxxxxxxxxx"); 

    Request.addProperty(METHOD_NAME, parameters); 



    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    soapEnvelope.setOutputSoapObject(Request); 


    HttpTransportSE androidHttpTransportSE = new HttpTransportSE(URL); 
    androidHttpTransportSE.call(SOAP_ACTION, soapEnvelope); 


    Object result = (Object)soapEnvelope.getResponse(); 
    return result.toString(); 
0
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

request.addProperty("name1", values1); 
request.addProperty("name2", values2); 



SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
soapEnvelope.setOutputSoapObject(request); 


HttpTransportSE androidHttpTransportSE = new HttpTransportSE(URL); 
androidHttpTransportSE.call(SOAP_ACTION, soapEnvelope); 
Object result = (Object)soapEnvelope.getResponse(); 
final String str = result.toString();