android http通信(二) 英译汉字典实例探究网络通信三种方法
方法一:HttpURLConnection??
String res = "";String urlstr = "http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx/getEnCnTwoWayTranslator?Word="+inword;//1.HttpURLConnection 测试成功 成功得到xml/*URL url =new URL(urlstr); HttpURLConnection urlConn = (HttpURLConnection) url .openConnection();// 打开连接,此处只是创建一个实力,并没有真正的连接 urlConn.connect();// 连接 InputStream input = urlConn.getInputStream(); InputStreamReader inputReader = new InputStreamReader(input); BufferedReader reader = new BufferedReader(inputReader); String inputLine = null; StringBuffer sb = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { sb.append(inputLine).append("\n"); } reader.close(); inputReader.close(); input.close(); urlConn.disconnect(); res = sb.toString();*/
?
方法二:HttpGet? HttpClient? HttpResponse? EntityUtils
//2.HttpPost/HttpGet 一般取得数据用Get就可以了,提交修改采用Post HttpGet httpRequest = new HttpGet(urlstr); //取得HttpClient对象 HttpClient httpclient = new DefaultHttpClient(); //请求HttpClient,取得HttpResponse HttpResponse httpResponse = httpclient.execute(httpRequest); //请求成功 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); res = strResult; }else{ res="failed"; }
?
方法三:SoapObject? SoapSerializationEnvelope? AndroidHttpTransport
/* * 通过WebService KSAOP 获得Webservice本地接口 直接调用方法 不用解析XML了 */public static String getTranslateResultBySOAP(String inword) throws IOException, XmlPullParserException{// 命名空间String serviceNamespace = "http://WebXml.com.cn/";// 请求URLString serviceURL = "http://webservice.webxml.com.cn/WebServices/TranslatorWebService.asmx";// 调用的方法String methodName = "getEnCnTwoWayTranslator";// 实例化SoapObject对象SoapObject request = new SoapObject(serviceNamespace, methodName);request.addProperty("Word", inword);// 获得序列化的EnvelopeSoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = request;envelope.dotNet =true;///注意:这个属性是对dotnetwebservice协议的支持,如果dotnet的webservice 不指定rpc方式则用true否则要用false// envelope.setOutputSoapObject(request);(new MarshalBase64()).register(envelope);// Android传输对象AndroidHttpTransport ht = new AndroidHttpTransport(serviceURL);ht.debug = true;// 调用 没有WWWht.call(serviceNamespace+methodName, envelope);if (envelope.getResponse() != null) {SoapObject result = (SoapObject) envelope.bodyIn; int cnt = result.getPropertyCount(); if (cnt > 0) { //服务的返回值是一个数组,第一个元素是oid,第二个是用户的显示名 String cn = result.getProperty(0).toString(); // String en= result.getProperty(1).toString(); return cn; }}return "failed";}
?