一、測試結果截圖
1.1 服務端控制台輸出截圖
1.2 用戶端 測試對象傳出 截圖
二、通訊接口
2.1 BasicAPI
public interface BasicAPI {
/*
*
*/
public String hello();
* 測試中文字元
public String TestChinese(String str);
* 測試對象傳入
public void TestObject(TestVO vo);
* 測試對象傳出
public TestVO TestObject();
* 測試HashMap
public HashMap TestHashMap(HashMap map);
* 測試數組
public String[] TestArray(String[] strArray);
* 測試泛型
public List<String> TestList(List<String> list);
}
2.2 TestVO
public class TestVO implements Serializable {
public int Id;
public String Title;
public String Content;
三、服務端(Java Web Server)
public class BasicService extends HessianServlet implements BasicAPI {
/**
private static final long serialVersionUID = -8301199876420831947L;
private String _greeting = "Hello, world";
public void setGreeting(String greeting)
{
_greeting = greeting;
}
public String hello()
return _greeting;
* 測試中文傳輸
* @see com.BasicAPI#TestChinese(java.lang.String)
@Override
public String TestChinese(String str) {
System.out.println("TestChinese:"+str);
return "歡迎來到服務端!";
}
* @see com.BasicAPI#TestHashMap(java.util.HashMap)
public HashMap TestHashMap(HashMap map) {
System.out.println("TestHashMap:"+map.get("abc"));
map.put("result", "ok");
return map;
* 測試TestObject傳入
* @see com.BasicAPI#TestObject(com.TestVO)
public void TestObject(TestVO vo) {
System.out.println("TestObjectEx:"+vo.Id);
* 測試TestObject傳出
* @see com.BasicAPI#TestObject()
public TestVO TestObject() {
System.out.println("TestObjectEx Return TestVO");
TestVO vo = new TestVO();
vo.Id = 1;
vo.Title = "title";
vo.Content = "Content";
return vo;
* 測試List<String>
* @see com.BasicAPI#TestList(java.util.List)
public List<String> TestList(List<String> list) {
System.out.println("TestList:"+list.get(0));
list.add("addOne");
return list;
* 測試String[]
* @see com.BasicAPI#TestArray(java.lang.String[])
public String[] TestArray(String[] strArray) {
System.out.println("TestArray:"+strArray[0]);
strArray[0] = "Change Form Server";
return strArray;
代碼說明:
a). 關于服務端的配置請參照上篇文章:http://www.cnblogs.com/over140/archive/2010/07/30/1788563.html。
四、用戶端(Android)
String url = "http://192.168.1.1:8080/HessianServer/hello.do";
HessianProxyFactory factory = new HessianProxyFactory();
try {
factory.setDebug(true);
factory.setReadTimeout(1000);
BasicAPI basic = (BasicAPI)factory.create(BasicAPI.class, url,getClassLoader());
//Hello World
//Toast.makeText(this, "調用結果:"+basic.hello(), Toast.LENGTH_LONG).show();
//測試中文字元傳輸
// Toast.makeText(this, "測試中文字元:"+basic.TestChinese("中文字元!"), Toast.LENGTH_LONG).show();
//測試對象傳入
// TestVO vo = new TestVO();
// vo.Id= 1;
// factory.setOverloadEnabled(true);
// basic.TestObject(vo);
//測試對象傳出
factory.setHessian2Reply(false);
TestVO vo = basic.TestObject();
Toast.makeText(this, "TestObject:"+vo.Title, Toast.LENGTH_LONG).show();
//測試List泛型
// List<String> list = new ArrayList<String>() ;
// list.add("1個元素");
// factory.setHessian2Reply(false);
// list = basic.TestList(list);
// Toast.makeText(this, "TestObject:"+list.size(), Toast.LENGTH_LONG).show();
//測試Hashmap
// HashMap map = new HashMap();
// map.put("abc", "123");
// map = basic.TestHashMap(map);
// Toast.makeText(this, "result:"+map.get("result"), Toast.LENGTH_LONG).show();
//測試數組
// String[] strArray = new String[]{"Send To Server"};
// strArray = basic.TestArray(strArray);
// Toast.makeText(this, "TestArray:"+strArray[0], Toast.LENGTH_LONG).show();
} catch (MalformedURLException e) {
e.printStackTrace();
}
a). 用戶端的文章也請參照上篇文章。
b). 這裡就在一個函數裡面測試的,分别解注測試即可,這裡例子全部測試通過。
c). 需要特别注意String[]、List<String>以及TestVO的傳出,需要加上"factory.setHessian2Reply(false);"這行代碼,否則Android用戶端傳入到Java服務端沒有問題,但是服務端傳回用戶端就報錯,諸如0x75之類的錯誤。
d). 另外如果有函數重載的話需要設定"factory.setOverloadEnabled(true);"。這裡TestObject()這個地方并沒有設定,也能調用成功,但是TestObject(TestVO vo)就必須設定了,這裡猜想是不是有預設行為。
維護
2011-1-8
在資料量較多的情況下(上百上千條)使用二維字元串數組效率較高,對象數組、XML串、JSON效率都較低,注意部署時把“factory.setDebug(true);”去掉或設定為false!
2011-5-20
在調試的情況下,如果上傳的資料量較大(超過100條)可能引發異常,但是去掉調試又能正常運作,找不到原因,是以建議調試的時候把上傳的資料量改小,分批上傳,釋出的時候可以改大。