1 /**2 *3 *4 * @author wym5 *6 */
7 public classMainActivity extends Activity {8
9 final String METHOD_HELLO_WORLD = "HelloWorld";10 final String METHOD_ECHO_MESSAGE = "EchoMessage";11 privateTextView txtMsg;12 //服务器链接
13 final String WEB_SERVICE_URL = "http://192.168.127.105/WebService1.asmx?wsdl";14 //默认命名空间
15 final String Namespace = "http://tempuri.org/";16 protected voidonCreate(Bundle savedInstanceState) {17 super.onCreate(savedInstanceState);18 setContentView(R.layout.activity_main);19 txtMsg=(TextView) findViewById(R.id.txtMsg);20 }21
22 //调用dohello方法
23 public voiddoHellow(View view)24 {25 Log.i("---------doHellow---", "doHellow");26 Map values = new HashMap();27 values.put("msg", "这是Android手机doHellow方法发出的信息");28 Request(METHOD_HELLO_WORLD);29 }
//调用doEchoMessage方法30 public voiddoEchoMessage(View view)31 {32 Log.i("---------doEchoMessage---", "doEchoMessage");33 Map values = new HashMap();34 values.put("msg", "这是Android手机doEchoMessage方法发出的信息");35 Request(METHOD_ECHO_MESSAGE, values);36 }37
38 /**39 * 执行异步任务40 *41 * @param params42 * 方法名+参数列表(哈希表形式)43 */
44 public void Request(Object... params) {45 new AsyncTask() {46
47 @Override48 protected String doInBackground(Object... params) {49 if (params != null && params.length == 2) {50 return CallWebService((String) params[0],51 (Map) params[1]);52 } else if (params != null && params.length == 1) {53 return CallWebService((String) params[0], null);54 } else{55 return null;56 }57 }58
59 protected voidonPostExecute(String result) {60 if (result != null) {61 txtMsg.setText("服务器回复的信息 :" +result);62 }63 };64
65 }.execute(params);66 }67
68 /**69 *70 * 调用WebService71 * @return WebService 返回值72 */
73 public String CallWebService(String MethodName, Map params) {74 Log.i("--------进入调用CallWebService------","CallWebService");75 //1、指定webservice的命名空间和调用的方法名76 //SoapObject类的第一个参数表示WebService的命名空间,77 //可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
78 SoapObject request=newSoapObject(Namespace,MethodName);79
80
81 //2、设置调用方法的参数值,如果没有参数,可以省略,
82 if(params!=null){83 Iterator iter=params.entrySet().iterator();84 while(iter.hasNext()){85 Map.Entry entry=(Map.Entry) iter.next();86 request.addProperty((String) entry.getKey(),87 (String) entry.getValue());88 }89 }90 //3、生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述91 //SOAP协议的版本号可以从WebService的WSDL文档中查看到
92 SoapSerializationEnvelope envelope=newSoapSerializationEnvelope(SoapEnvelope.VER12);93 envelope.bodyOut =request;94 //c#写的应用程序必须加上这句
95 envelope.dotNet = true;96 //创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:
97 HttpTransportSE ht=newHttpTransportSE(WEB_SERVICE_URL);98 //使用call方法调用WebService方法
99 try{100 //Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
101 ht.call(null, envelope);102 } catch(HttpResponseException e) {103 e.printStackTrace();104 } catch(IOException e) {105 e.printStackTrace();106 } catch(XmlPullParserException e) {107 e.printStackTrace();108 }109 //使用envelope对象的getResponse方法获得WebService方法的返回结果
110 try{111 SoapPrimitive result=(SoapPrimitive) envelope.getResponse();112 if(result!=null){113 Log.i("--------收到的回复------",result+"");114 returnresult.toString();115 }116 } catch(SoapFault e) {117 Log.e("---------发生了错误---------", e.getMessage().toString());118 e.printStackTrace();119 }120 return null;121 }122
123 }