2016-05-25 11 views
0

私はここのAndroidのnewbです。私はhttp://www.webservicex.net/globalweather.asmx?WSDLからkSOAP2 Webサービスを消費しようとしています。これまでのところ、私の要求はnull応答を返しました。私の要求に問題はありますか、何か不足していますか?次のようなコードがあります。kSOAP2リクエストはnullオブジェクトを返します

import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 


import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    Button sendBtn; 
    EditText editCityName, editCountryName; 
    String tempCity, tempCountry; 
    SoapObject testy; 

    SoapObject request; 
    final String METHOD_NAME1 = "GetWeather"; 
    final String SOAP_ACTION1 = "http://www.webserviceX.NET/GetWeather"; 
    final String NAMESPACE = "http://www.webserviceX.NET"; 
    final String SOAP_URL = "http://www.webservicex.net/globalweather.asmx"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     sendBtn = (Button) findViewById(R.id.button); 
     editCityName = (EditText) findViewById(R.id.editCityName); 
     editCountryName = (EditText) findViewById(R.id.editCountryName); 
     sendBtn.setOnClickListener(this); 
     Log.e("create", "test123"); 
    } 

    @Override 
    public void onClick(View v) { 
     tempCity = editCityName.getText().toString(); 
     tempCountry = editCountryName.getText().toString(); 
     testyTask task = new testyTask(); 
     task.execute(); 
     Log.e("test", "task started"); 
    } 

    private class testyTask extends AsyncTask <String, Void, String> 
    { 
     @Override 
     protected String doInBackground(String... params) 
     { 
      request = new SoapObject(NAMESPACE, METHOD_NAME1); 
      request.addProperty("CityName", tempCity); 
      request.addProperty("CountryName", tempCountry); 
      Log.e("request1", request.getProperty("CityName").toString()); 
      Log.e("request2", request.getProperty("CountryName").toString()); 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 

      HttpTransportSE httpTransport = new HttpTransportSE(SOAP_URL); 
      Log.d("transport", httpTransport.toString()); 
      httpTransport.debug = true; 
      try { 

       httpTransport.call(SOAP_ACTION1, envelope); 
       testy = (SoapObject) envelope.bodyIn; 


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

      //Log.d("dump Request: " , httpTransport.requestDump); 
      String xml = httpTransport.responseDump; 
      Log.e("dump response: " , xml); //Error here 
      //Log.e("weather", testy.toString()); 

      return "blah"; 
     } 

     @Override 
     protected void onPostExecute(String aVoid) 
     { 

      Log.e("end test", testy.toString()); 
      super.onPostExecute(aVoid); 
      Toast.makeText(getApplicationContext(), testy.toString(), Toast.LENGTH_LONG).show(); 
     } 

    } 
} 
+0

あなたは 'http:// wsdlbrowser.com /'であなたの石鹸サービスを試すことができ、その応答は何ですか? –

+0

私はサービスでウェブサイトを試しましたが、ウェブサイトからの応答は文字列オブジェクトです。 – RLim

答えて

1

まず、kSoap2の最新バージョンを使用してください。以下は最新バージョンをダウンロードできるリンクです。現在、最新バージョンは3.6.1です。 あなたはインターネットを持っていることを確認してください:私はあなたが
MainActivity.classに

public class MainActivity extends AppCompatActivity { 
    SoapObject request; 
    SoapObject testy; 
    final String METHOD_NAME1 = "GetWeather"; 
    final String SOAP_ACTION1 = "http://www.webserviceX.NET/GetWeather"; 
    final String NAMESPACE = "http://www.webserviceX.NET"; 
    final String SOAP_URL = "http://www.webservicex.net/globalweather.asmx"; 

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

     new testyTask().execute(); 

    } 

    private class testyTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 
      request = new SoapObject(NAMESPACE, METHOD_NAME1); 
      request.addProperty("CityName", "Delhi"); 
      request.addProperty("CountryName", "India"); 
      Log.e("request1", request.getProperty("CityName").toString()); 
      Log.e("request2", request.getProperty("CountryName").toString()); 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 

      HttpTransportSE httpTransport = new HttpTransportSE(SOAP_URL); 
      Log.d("transport", httpTransport.toString()); 
      httpTransport.debug = true; 
      try { 

       httpTransport.call(SOAP_ACTION1, envelope); 
       testy = (SoapObject) envelope.bodyIn; 


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

      //Log.d("dump Request: " , httpTransport.requestDump); 
      String xml = httpTransport.responseDump; 
      Log.e("dump response: ", xml); //Error here 
      //Log.e("weather", testy.toString()); 

      return "blah"; 
     } 

     @Override 
     protected void onPostExecute(String aVoid) { 

      Log.e("end test", testy.toString()); 
      super.onPostExecute(aVoid); 
      Toast.makeText(getApplicationContext(), testy.toString(), Toast.LENGTH_LONG).show(); 
     } 

    } 
} 

を掲示し、私は取得しています応答が

GetWeatherResponse{GetWeatherResult=<?xml version="1.0" encoding="utf-16"?> 
     <CurrentWeather> 
     <Location>New Delhi/Palam, India (VIDP) 28-34N 077-07E 233M</Location> 
     <Time>May 26, 2016 - 12:00 PM EDT/2016.05.26 1600 UTC</Time> 
     <Wind> Calm:0</Wind> 
     <Visibility> 1 mile(s):0</Visibility> 
     <SkyConditions> mostly clear</SkyConditions> 
     <Temperature> 96 F (36 C)</Temperature> 
     <DewPoint> 68 F (20 C)</DewPoint> 
     <RelativeHumidity> 39%</RelativeHumidity> 
     <Pressure> 29.53 in. Hg (1000 hPa)</Pressure> 
     <Status>Success</Status> 
     </CurrentWeather>; } 

です。注同じコードを使用している https://oss.sonatype.org/content/repositories/ksoap2-android-releases/com/google/code/ksoap2-android/ksoap2-android-assembly/

マニフェストファイルのアクセス許可。

+0

速い応答のための感謝Deepak、私はマニフェストで次の権限を持っています。 RLim

+0

あなたはAndroidのどのバージョンをお使いですか? – RLim

+0

私はandroid sdkでこれをテストしました23 –

関連する問題