转:android使用protobuf实现网络订单管理功能-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235532
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: android平台

2015-04-21 10:59:16

http://my.oschina.net/ikende/blog/159930


在新版本的beetle.netpackage开源组件中集成了对protobuf的支持,在android下可以简单地使用beetle.netpackage实现基于protobuf的tcp通讯数据交互.下详细讲解实现一个网络订单管理功能的过程.


协议定义

既然使用probobuf进行数据交互,那就需要基于protobuf制定一系列的通信对象,主要包括数据请求和应答的数据对象格式.在做之前需要把需求整理一下明确一下有那些功能,由于demo主要是用于介绍一下protobuf在beetle.netpackage下的使用所以功能并不复杂包括:订单分页查询和订单明细查看.具体protobuf定义如下:

  1. package ordermanager;
  2. option java_package = "com.beetle.samples.ordermanager";
  3. option java_outer_classname = "orderproto";

  4. message getemployee
  5. {
  6.         optional string name=1;
  7. }

  8. message getemployeeresponse
  9. {
  10.         repeated employee items=1;
  11. }

  12. message employee
  13. {
  14.         optional string id=1;
  15.         optional string name=2;
  16. }

  17. message getcustomer
  18. {
  19.         optional string name=1;
  20. }

  21. message getcustomerresponse
  22. {
  23.         repeated customer items =1;
  24. }

  25. message customer
  26. {
  27.         optional string id=1;
  28.         optional string name=2;
  29. }

  30. message response
  31. {
  32.         optional string error=1;
  33.         optional string type =2;
  34. }

  35. message ordersearch
  36. {
  37.         optional string        employee=1;
  38.         optional int32        pageindex=2;
  39.         optional string customer =3;
  40.         optional string fromdate =4;
  41.         optional string todate =5;
  42. }
  43. message ordersearchresponse
  44. {
  45.         repeated order        items =1;
  46.         optional int32        pageindex =2;
  47.         optional int32  pages =3;
  48. }
  49. message order
  50. {
  51.         optional string orderid=1;
  52.         optional string employee =2;
  53.         optional string customer =3;
  54.         optional string orderdate=4;
  55.         optional string requireddate=5;
  56.         optional string shippeddate=6;
  57.         optional string shipname=7;
  58.         optional string shipaddress=8;
  59.         optional string shipcity =9;
  60.         optional string shipregion=10;
  61. }
  62. message getorderdetail
  63. {
  64.         optional string orderid =1;
  65. }
  66. message getorderdetailresponse
  67. {
  68.         repeated orderdetail items =1;
  69. }
  70. message orderdetail
  71. {
  72.         optional string orderid=1;
  73.         optional string product=2;
  74.         optional double unitprice=3;
  75.         optional int32        quantity=4;
  76.         optional float        discount=5;
  77. }
复制代码

主要制定了订单雇员,客户,订单和订单明细查询的数据交互格式.


通讯定义


beetle.netpackage基础通讯都已经封装好了,所以使用起来非常简单,probotuf的注册和创建相应的tcp连接只需要几行代码即可

  1. protopackage.register(orderproto.class);
  2.         mclient = new netclient("10.0.2.2", 9088, new protopackage(), this);
  3.         mclient.connect();
复制代码

以上代码是注册相关protobuf对象信息,主要用于beetle.netpackage对protobuf进行自动化处理.然后定义一个基于protobuf解释器的连接对象,交接入到相应ip端口的服务中.


消息接收定义

beetle.netpackage提供基础的controller功能,因此只需要定义相关消息类型的方法即可.

  1. public void ongetorderdetali(netclient client, getorderdetailresponse e) {
  2.                 final list details = e.getitemslist();

  3.                 mhandler.post(new runnable() {

  4.                         @override
  5.                         public void run() {
  6.                                 // todo auto-generated method stub
  7.                                 morderdetailviewadapter.clear();
  8.                                 for (orderdetail item : details) {
  9.                                         morderdetailviewadapter.add(item);
  10.                                 }
  11.                                 morderdetaildialog.show();
  12.                                 listview lv = (listview) morderdetaildialog
  13.                                                 .findviewbyid(r.id.lstorderdetail);
  14.                                 lv.setadapter(morderdetailviewadapter);
  15.                         }
  16.                 });
  17.         }

  18.         public void ongetcustomerresponse(netclient client, getcustomerresponse e) {
  19.                 mcustomers = e.getitemslist();
  20.         }

  21.         public void ongetemployeeresponse(netclient client, getemployeeresponse e) {
  22.                 memployees = e.getitemslist();
  23.         }

  24.         public void onordersearchrespnose(netclient client, ordersearchresponse e) {
  25.                 final list orders = e.getitemslist();
  26.                 mpages = e.getpages();
  27.                 mhandler.post(new runnable() {

  28.                         @override
  29.                         public void run() {
  30.                                 // todo auto-generated method stub
  31.                                 morderviewadapter.clear();
  32.                                 for (order item : orders) {
  33.                                         morderviewadapter.add(item);
  34.                                 }
  35.                                 morderviewadapter.notifydatasetchanged();
  36.                         }
  37.                 });
  38.         }
复制代码
通过调用以下方法则可以自动切入到相关消息方法中.
  1. @override
  2.         public void receive(netclient client, object msg) {
  3.                 controller.invoke(this, mclient, msg);
  4.         }
复制代码
消息发送请求
  1. getcustomer.builder getcusomer = getcustomer.newbuilder();
  2.         mclient.send(getcusomer.build());
  3.         getemployee.builder getemployee = getemployee.newbuilder();
  4.         mclient.send(getemployee.build());
复制代码
功能截图

        

  


        


下载代码: 
beetle.netpackage凯发k8官网下载客户端中心官网: 


原文链接:

阅读(4123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图