Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> [hessdroid]Android下使用Hessian與Java服務端通訊的傳值測試

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

編輯:Android開發實例

前言

  至此hessian與Java服務端通訊全部測試完成,主要是傳值方面的測試,包括中文字符、VO對象、HashMap、List<String>和String[]的雙向傳值測試。
 

 

 

正文

  關於Hessian以及hessdroid請參考本博文章:[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 "歡迎來到服務端!";
    }

    /*
     * 測試HashMap
     * @see com.BasicAPI#TestHashMap(java.util.HashMap)
     */
    @Override
    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)
     */
    @Override
    public void TestObject(TestVO vo) {
        System.out.println("TestObjectEx:"+vo.Id);
    }

    /*
     * 測試TestObject傳出
     * @see com.BasicAPI#TestObject()
     */
    @Override
    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)
     */
    @Override
    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[])
     */
    @Override
    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"};
//            factory.setHessian2Reply(false);
//            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)就必須設置了,這裡猜想是不是有默認行為。


 

結束
 

   本來以為可以很快結束測試,結果卡客戶端代碼說明c裡面的問題了,也是從錯誤中reply中猜測出來,這個錯誤還是我把服務端hessian從3.0.20換到最新的4.0.7才顯示出來,不過現在解決了,又切換回老版本的了 :)
 

轉自:http://www.cnblogs.com/over140/archive/2010/08/04/1792167.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved