2013-07-01 2 views
0

Android 용 JAVA 웹 서비스를 사용하려고합니다. 여기 자바 웹 서비스가 Android Ksoap에서 null 매개 변수를 수신 중

내가 지금까지 시도한 것입니다 :

private void CallWebServiceDummy() { 
    // TODO Auto-generated method stub 
    try { 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
        .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER10); 
     soapEnvelope.dotNet = false; 
     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 

     PropertyInfo pi = new PropertyInfo();  

      StringArraySerializer a = new StringArraySerializer(); 
      a.add("hello"); a.add("world"); String n0 = NAMESPACE; 

      pi = new PropertyInfo(); pi.setName("a"); pi.setValue(a); 
      pi.setType(a.getClass()); pi.setNamespace(n0); 
      Request.addProperty(pi); 

      String b = "my name"; pi = new PropertyInfo(); pi.setName("b"); 
      pi.setValue(b); Request.addProperty(pi); 


     soapEnvelope.setOutputSoapObject(Request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.debug = true; 

     androidHttpTransport.call(SOAP_ACTION, soapEnvelope); 
     Log.d("test", "request: " + androidHttpTransport.requestDump); 
     Log.d("test", "response: " + androidHttpTransport.responseDump); 

     SoapObject resultsRequestSOAP = (SoapObject) soapEnvelope.bodyIn;  

     String c = resultsRequestSOAP.toString(); 

    } catch (Exception e) { 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_LONG; 

     Toast toast = Toast.makeText(context, e.getMessage(), duration); 
     toast.show(); 

     toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 0); 
    } 
} 

내 자바 웹 서비스 코드 :

package MyPackage; 

public class WebServiceClass { 

public String addnumbers(String[] a, String b) { 
    String c = new StringBuilder("This the String1 ").append(a[0]).append(" merged with String2 ").append(b).toString(); 

    return c; 
} 
} 

내 전역 :

private static final String NAMESPACE = "http://MyPackage"; private 
    static final String URL = 
    "http://10.0.2.2:8080/WebService/services/WebServiceClass?wsdl"; private 
    static final String SOAP_ACTION = "urn:addnumbers"; private static final 
    String METHOD_NAME = "addnumbers"; 

문제 :

받은 응답 :

addnumbersResponse{return=This the String1 merged with String2 my name; } 

첫 번째 매개 변수가 웹 서비스로 전송되지 않습니다. 이 줄을 제거하려고했습니다 :

soapEnvelope.dotNet = false; 하지만 여전히 작동하지 않습니다.

남자들이 나를 도와주세요. 나는 이틀 동안 붙어있다. 제공된 모든 도움에 감사드립니다.

답변

0

메서드의 첫 번째 인수의 형식은 String뿐만 아니라 String 배열입니다. StringArraySerializer 대신 수동으로 문자열을 추가하십시오. 이 페이지는 Adding an array of complex objects to the request으로 표시됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 StringArraySerializer a = new StringArraySerializer(); a.add ("hello"); a.add ("world"); 또한 문자열 배열을 작성 중입니다. – developer

0

네임 스페이스가 맞는지 확인하십시오!

같은 문제로 3 시간을 보냈다가 WebService 클래스에서 선언 된 네임 스페이스가 SoapObject를 만들 때와 다른 것으로 나타났습니다.