天天看點

[hessdroid]Android下使用Hessian與Java服務端通訊的傳值測試

一、測試結果截圖

    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條)可能引發異常,但是去掉調試又能正常運作,找不到原因,是以建議調試的時候把上傳的資料量改小,分批上傳,釋出的時候可以改大。