zoukankan      html  css  js  c++  java
  • [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试


    前言

      至此hessian与Java服务端通讯全部测试完成,主要是传值方面的测试,包括中文字符、VO对象、HashMap、List<String>和String[]的双向传值测试。

    声明

      欢迎转载,但请保留文章原始出处:)

        博客园:http://www.cnblogs.com

        农民伯伯: http://www.cnblogs.com/over140/ 

    正文

      关于Hessian以及hessdroid请参考本博文章:[hessdroid]Android下使用Hessian与Java服务端通讯(http://www.cnblogs.com/over140/archive/2010/07/30/1788563.html)。

      一、测试结果截图

        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)就必须设置了,这里猜想是不是有默认行为。

    维护

      2011-1-8

        在数据量较多的情况下(上百上千条)使用二维字符串数组效率较高,对象数组、XML串、JSON效率都较低,注意部署时把“factory.setDebug(true);”去掉或设置为false!

      2011-5-20

        在调试的情况下,如果上传的数据量较大(超过100条)可能引发异常,但是去掉调试又能正常运行,找不到原因,所以建议调试的时候把上传的数据量改小,分批上传,发布的时候可以改大。


    结束

       本来以为可以很快结束测试,结果卡客户端代码说明c里面的问题了,也是从错误中reply中猜测出来,这个错误还是我把服务端hessian从3.0.20换到最新的4.0.7才显示出来,不过现在解决了,又切换回老版本的了 :)

  • 相关阅读:
    osgearth cache
    3ds Max导出FBX动画模型在OSG中使用
    osgExp只能将3dmax中的动画导出为路径动画osg::AnimationPath,而不能导出osgAnimation::Animation。osg播放骨骼动画应该使用FBX格式
    ExtJS前端框架EXT弹出窗口事件
    大数据学习——securecrt同时向多个tab窗口发送相同的命令
    大数据学习——yarn集群启动
    如何取SQL结果集的第一条记录
    Java比较两个数组中的元素是否相同的最简单方法
    大数据学习——hdfs集群启动
    大数据学习——hadoop安装
  • 原文地址:https://www.cnblogs.com/over140/p/1792167.html
Copyright © 2011-2022 走看看