在HttpClient模块中用到了两个重要的类:HttpGet和HttpPost。这两个类分别用来提交HTTP GET和HTTP POST请求。为了测试本节的例子,须要先编写一个Servlet程序,用来接收HTTP GET和HTTP POST请求。读者也可使用其余服务端的资源来测试本节的例子。 java
假设192.168.17.81是本机的IP,客户端能够经过以下的URL来访问服务端的资源: web
http://192.168.17.81:8080/querybooks/QueryServlet?bookname=开发 学习
在这里bookname是QueryServlet的请求参数,表示图书名,经过该参数来查询图书信息。 测试
如今咱们要经过HttpGet和HttpPost类向QueryServlet提交请求信息,并将返回结果显示在TextView组件中。 url
不管是使用HttpGet,仍是使用HttpPost,都必须经过以下3步来访问HTTP资源。 spa
1.建立HttpGet或HttpPost对象,将要请求的URL经过构造方法传入HttpGet或HttpPost对象。 debug
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。 code
3.经过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。 orm
若是使用HttpPost方法提交HTTP POST请求,还须要使用HttpPost类的setEntity方法设置请求参数。 对象
本例使用了两个按钮来分别提交HTTP GET和HTTP POST请求,并从EditText组件中得到请求参数(bookname)值,最后将返回结果显示在TextView组件中。两个按钮共用一个onClick事件方法,代码以下:
public void onClick(View view){ // 读者须要将本例中的IP换成本身机器的IP String url = "http://192.168.17.81:8080/querybooks/QueryServlet"; TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult); EditText etBookName = (EditText) findViewById(R.id.etBookName); HttpResponse httpResponse = null; try{ switch (view.getId()){ // 提交HTTP GET请求 case R.id.btnGetQuery: // 向url添加请求参数 url += "?bookname=" + etBookName.getText().toString(); // 第1步:建立HttpGet对象 HttpGet httpGet = new HttpGet(url); // 第2步:使用execute方法发送HTTP GET请求,并返回HttpResponse对象 httpResponse = new DefaultHttpClient().execute(httpGet); // 判断请求响应状态码,状态码为200表 示服务端成功响应了客户端的请求 if (httpResponse.getStatusLine(). getStatusCode() == 200){ // 第3步:使用getEntity方法得到返回结果 String result = EntityUtils. toString(httpResponse.getEntity()); // 去掉返回结果中的"\r"字符, 不然会在结果字符串后面显示一个小方格 tvQueryResult.setText(result.replaceAll("\r", "")); } break; // 提交HTTP POST请求 case R.id.btnPostQuery: // 第1步:建立HttpPost对象 HttpPost httpPost = new HttpPost(url); // 设置HTTP POST请求参数必须用NameValuePair对象 List params = new ArrayList(); params.add(new BasicNameValuePair ("bookname", etBookName.getText(). toString())); // 设置HTTP POST请求参数 httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 第2步:使用execute方法发送HTTP POST请求,并返回HttpResponse对象 httpResponse = new DefaultHttpClient(). execute(httpPost); if (httpResponse.getStatusLine(). getStatusCode() == 200){ // 第3步:使用getEntity方法得到返回结果 String result = EntityUtils.toString (httpResponse.getEntity()); // 去掉返回结果中的"\r"字符, 不然会在结果字符串后面显示一个小方格 tvQueryResult.setText(result.replaceAll("\r", "")); } break; } } catch (Exception e){ tvQueryResult.setText(e.getMessage()); }2,运用SoapObject对象
private static final String NAMESPACE = SessionApp.NAMESPACE; // WSDL文档的URL 注意这里要用ip,即便是本机也不能用localhost或者127.0.0.1代替 private static final String URL = SessionApp.clipServer; public static boolean bulkDelete(String hashCodes,int boxType,String userName,String token) { boolean flag = false; String METHODNAME = "bulkDelete"; // 指定WebService的命名空间和调用的方法名利用SoapObject类 // 第1个参数表示WebService的命名空间,能够从WSDL文档中找到WebService的命名空间。 // 第2个参数表示要调用的WebService方法名 SoapObject request = new SoapObject(NAMESPACE, METHODNAME); // 设置调用方法的参数值,这一步是可选的,若是方法没有参数,能够省略这一步。设置方法的参数值的代码以下 // 要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不必定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致便可。 request.addProperty("hashCodes", hashCodes); request.addProperty("boxType", boxType); request.addProperty("userName", userName); request.addProperty("token", token); // 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述 // 构造方法设置SOAP协议的版本号:该版本号须要根据服务端WebService的版本号设置 // SoapSerializationEnvelope对象后,不要忘了设置SoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第1步建立的SoapObject对象。 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false; envelope.setOutputSoapObject(request); // 建立HttpTransportSE对象。经过HttpTransportSE类的构造方法能够指定WebService的WSDL文档的URL HttpTransportSE transport = new HttpTransportSE(URL); // transport.debug = true; // web service请求 try { // 使用call方法调用WebService方法 transport.call(NAMESPACE + METHODNAME, envelope); // 使用getResponse方法得到WebService方法的返回结果 Object obj = envelope.bodyIn; if(obj instanceof SoapObject){ SoapObject result = (SoapObject) obj; Object object = result.getProperty(0); if(object != null){ String result_str = object.toString(); flag = Boolean.valueOf(result_str); } //当出现异常时,抛出此异常 }else if(obj instanceof SoapFault){ throw (SoapFault)obj; } } catch (SoapFault e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } return flag; }工做中总结的一点知识,仅供参考学习。