最近在研究一些Android和JavaWeb項目的交互問題,總結一點東西在這篇文章裏。首先說來,如果想要實現Android在網絡上與JavaWeb的交互,就要把JavaWeb的項目的方法暴露在網絡中,然後供Android的這一端調用,實現交互,其中,主要用到了兩個知識點,WebService和SOAP的使用。
這裏我寫了一個很簡單的小例子來實現交互。
首先,在開發工具中,創建了一個Web Project,一定要對項目添加JAX-WS類庫。在代碼部分我就只寫了一個很簡單的計算兩個數的和的函數:
package com.demo.pack;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class Calculate {
@WebMethod
public int add(final int num1, final int num2){
return num1 + num2;
}
}
然後,點擊下圖中的New Web Service,將剛剛寫的這個函數放到網絡服務上
點擊Finish就創建完成了,這個項目的Calculate方法已經被暴露在了網絡上,也就是說,可以供Android調用了。
接下來,我再另外創建了一個Android的項目。在這個Android項目中除了Android的自己的庫之外,一定還要引入以下的ksoap2-android-assembly-2.4-jar-with-dependencies.jar
這個jar文件可以使Android的項目訪問到Web Service,所以必不可少,一定要加入進來。
在Android的這個項目的佈局中,我只是添加了兩個EditText來得到用戶輸入的值,和一個Button去調用WebService上已經託管在網絡上的Calculate函數來計算結果。
在Button的監聽器類當中,編寫了和JavaWeb項目交互的代碼,主要的部分具體如下:
//WebService中的wsdl文件的網絡地址
String wsdl = "http://192.168.1.102:8080/ch10_app01_WebService/CalculatePort?wsdl";
//WebService中的命名空間
String namespace = "http://pack.demo.com/";
//調用方法的名稱
String webmethod = "add";
//創建soapObject對象
SoapObject soapObject = new SoapObject(namespace, webmethod);
//設置參數
soapObject.addProperty("arg0", num1);
soapObject.addProperty("arg1", num2);
//創建SoapSerializationEnvelope對象,並設置WebService版本號
SoapSerializationEnvelope serializationEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//設置serializationEnvelope對象的badyOut屬性
serializationEnvelope.bodyOut = soapObject;
//創建HttpTransportSE對象,並且確定wsdl網絡地址
HttpTransportSE httpTransportSE = new HttpTransportSE(wsdl);
try {
//httpTransportSE調用Call方法
httpTransportSE.call(null, serializationEnvelope);
//獲取返回的結果對象
if(serializationEnvelope.getResponse() != null){
Object obj = serializationEnvelope.getResponse();
//顯示獲取到的結果對象
Toast.makeText(getApplicationContext(), "結果爲:"+obj.toString(), Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在這段代碼中,有必要說明一下的是,在寫WebService中的wsdl文件的網絡地址時,一定要寫ipv4的靜態地址,不能寫什麼localhost。另外,命名空間什麼的可以再JavaWeb項目中的CalculateDelegate.java中找到。運行如下:
這樣,Android項目就成功的和JavaWeb項目實現了交互!
本文出自 “nankaigz” 博客