2014-10-07 6 views
1

안녕하세요, 저는 이미 하나의 simpes WS를 소비하려고 애 쓰고 있습니다. 이미이 오류를 해결하기 위해 여러 가지 방법을 시도해 보았지만 실패했습니다. 다른 kSOAP 2.5 버전을 사용해 보았습니다. 2, 2.6.0, 3.0.0, 3.3.0. .. 고스트 리아는 해결 방법을 알고 싶어합니다. 때마다 나는 "transporte.call (SOAP_ACTION sobre);" null 예외가 생성됩니다. PS : WS 무료, 이것은 그들이에 액세스하려면 링크입니다 : http://www.w3schools.com/webservices/tempconvert.asmx안드로이드는 WebService, Exception을 소비합니다. HttpTransportSE.call()

이 내 코드입니다 : 지식을 공유하기위한

private static final String SOAP_ACTION = "http://tempuri.org/CelsiusT oFahrenheit"; 
private static final String METHOD_NAME = "CelsiusToFahrenheit"; 
private static final String NAMESPACE = "http://tempuri.org"; 
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 
TextView tv; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tv = (TextView)findViewById(R.id.textView1); 

    try{ 

     SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME); 
     request.addProperty("Celsius", "32");   

     SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     sobre.dotNet = true; 
     sobre.setOutputSoapObject(request); 

     HttpTransportSE transporte = new HttpTransportSE(URL, 30000); 

     transporte.call(SOAP_ACTION, sobre); 

     SoapPrimitive resultado = (SoapPrimitive)sobre.getResponse(); 

     tv.setText("" + resultado.toString()); 

    }catch(Exception e){ 
     tv.setText(e.getMessage()); 
    } 

} 

감사합니다!

답변

0

당신이있어 잘못 네임 스페이스, 방법 및 비누 행동

private static final String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; 
private static final String METHOD_NAME = "CelsiusToFahrenheit"; 
private static final String NAMESPACE = "http://www.w3schools.com/webservices/"; 

는 희망이 도움이

편집 :

이 작동 :

private static final String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; 
private static final String METHOD_NAME = "CelsiusToFahrenheit"; 
//private static final String NAMESPACE = "http://www.w3schools.com/webservices"; 
private static final String NAMESPACE = "http://www.w3schools.com/webservices/"; 
//private static final String NAMESPACE = "http://www.w3schools.com/webservices/"; 
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 
//private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; 
String result = ""; 

TextView tv; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tv = (TextView)findViewById(R.id.textView1); 

    try{ 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("Celsius", "32");   

     final SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     sobre.dotNet = true; 
     sobre.setOutputSoapObject(request); 

     final HttpTransportSE transporte = new HttpTransportSE(URL, 30000); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        transporte.call(SOAP_ACTION, sobre); 

        SoapPrimitive resultado = (SoapPrimitive)sobre.getResponse(); 

        result = resultado.toString(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

     int countWait = 5; 
     while (result.isEmpty() && countWait > 0){ 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
       break; 
      } 
      countWait--; 
     } 
     tv.setText(result); 

    }catch(Exception e){ 
     tv.setText(e.getMessage()); 
    } 

} 

문제는 당신이었다 메인에서 네트워크 작업을 수행 할 수 없습니다. 실. 일부 네임 스페이스 및 기타 상수 문제가 추가되었습니다.

+0

안녕하세요 방탄복, 나는 이 방법의 예외를 유지의 "네임 스페이스, 방법, 비누 조치를"로 변경하고, 해결되지 ".call()" – Muller

+0

필자는 WSDL을 살펴 보았고 실제로 'private static final String NAMESPACE = "http://www.w3schools.com/webservices/"; 끝에 끝에 슬래시가 표시되었습니다. 이거해볼 수 있니? – serge

+0

방금이 슬래시를 추가하는 답변을 편집했습니다. – serge

0

서지 직장에서의 코드,하지만 뭔가

망가이

`StrictMode.ThreadPolicy 정책 = 새로운 StrictMode.ThreadPolicy.Builder를 추가, 그래서 스레드를 볼 수있는 주요 트레드의 액세스를 위해 경찰을 필요로 필요() .permitAll(). build();

StrictMode.setThreadPolicy (policy);

또는 사용이 asinctask

class DemoTask extends AsyncTask<Void, Void, Void> { 

protected Void doInBackground(Void... arg0) { 
    //Your implementation 
} 

protected void onPostExecute(Void result) { 
    // TODO: do something with the feed 
} 

}