By far the easiest way is to use the ksoap2-android API. You need the ksoap2 jar file (with all dependencies) which can be found here and you need to add this to your classpath. In the following sample code we call a free web service, called currency convertor, which has one operation (method) that is is called
ConversionRate
. If you look at the service dscription (the WSDL file), you will see that this operation takes two parameters, FromCurrency
and ToCurrency
. Lets say that we want to find out the conversion rate from USD to EUR. We implement the following Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
| package gr.panos.caller; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.SoapFault; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.widget.TextView; public class ConvertorCaller extends Activity { private static final String METHOD = "ConversionRate" ; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_convertor_caller); textView = (TextView) findViewById(R.id.textView1); AsyncTaskRunner runner = new AsyncTaskRunner(); runner.execute(); } private class AsyncTaskRunner extends AsyncTask<String, String, String>{ private String resp; @Override protected String doInBackground(String... params) { try { SoapObject request = new SoapObject(NAMESPACE, METHOD); request.addProperty( "FromCurrency" , "USD" ); request.addProperty( "ToCurrency" , "EUR" ); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true ; envelope.setOutputSoapObject(request); System.out.println( "************ I AM SENDING: " + envelope.bodyOut); HttpTransportSE transport = new HttpTransportSE(URL); try { transport.call(SOAP_ACTION, envelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } if (envelope.bodyIn != null ) { if (envelope.bodyIn instanceof SoapFault) { String s = ((SoapFault) envelope.bodyIn).faultstring; System.out.println( "************ ERROR: " + s); resp = s; } else if (envelope.bodyIn instanceof SoapObject) { SoapObject obj = ((SoapObject) envelope.bodyIn); System.out.println( "**** RESPONSE: " +obj); SoapPrimitive root = (SoapPrimitive) obj.getProperty( 0 ); System.out.println( "**** CONVERSION RATE: " +root.toString()); resp = root.toString(); } } } catch (Exception e) { e.printStackTrace(); resp = e.getMessage(); } return resp; } /** * * @see android.os.AsyncTask#onPostExecute(java.lang.Object) */ @Override protected void onPostExecute(String result) { textView.setText(resp); } /** * * @see android.os.AsyncTask#onPreExecute() */ @Override protected void onPreExecute() { } /** * * @see android.os.AsyncTask#onProgressUpdate(Progress[]) */ @Override protected void onProgressUpdate(String... text) { } } } |
You also need to define a text view in your layout as well as give the activity INTERNET permission in your manifest file.
No comments:
Post a Comment