android 网络订单,转:android使用protobuf实现网络订单管理功能

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

协议定义

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

package ordermanager;

option java_package = "com.beetle.samples.ordermanager";

option java_outer_classname = "orderproto";

message GetEmployee

{

optional string Name=1;

}

message GetEmployeeResponse

{

repeated Employee Items=1;

}

message Employee

{

optional string ID=1;

optional string Name=2;

}

message GetCustomer

{

optional string Name=1;

}

message GetCustomerResponse

{

repeated Customer Items =1;

}

message Customer

{

optional string ID=1;

optional string Name=2;

}

message Response

{

optional string Error=1;

optional string Type =2;

}

message OrderSearch

{

optional string        Employee=1;

optional int32        PageIndex=2;

optional string Customer =3;

optional string FromDate =4;

optional string ToDate =5;

}

message OrderSearchResponse

{

repeated Order        Items =1;

optional int32        PageIndex =2;

optional int32  Pages =3;

}

message Order

{

optional string OrderID=1;

optional string Employee =2;

optional string Customer =3;

optional string OrderDate=4;

optional string RequiredDate=5;

optional string ShippedDate=6;

optional string ShipName=7;

optional string ShipAddress=8;

optional string ShipCity =9;

optional string ShipRegion=10;

}

message GetOrderDetail

{

optional string OrderID =1;

}

message GetOrderDetailResponse

{

repeated OrderDetail Items =1;

}

message OrderDetail

{

optional string OrderID=1;

optional string Product=2;

optional double UnitPrice=3;

optional int32        Quantity=4;

optional float        Discount=5;

}

复制代码

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

通讯定义

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

ProtoPackage.Register(orderproto.class);

mClient = new NetClient("10.0.2.2", 9088, new ProtoPackage(), this);

mClient.Connect();

复制代码

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

消息接收定义

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

public void OnGetOrderDetali(NetClient client, GetOrderDetailResponse e) {

final List details = e.getItemsList();

mHandler.post(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

mOrderDetailViewAdapter.clear();

for (OrderDetail item : details) {

mOrderDetailViewAdapter.add(item);

}

mOrderDetailDialog.show();

ListView lv = (ListView) mOrderDetailDialog

.findViewById(R.id.lstOrderDetail);

lv.setAdapter(mOrderDetailViewAdapter);

}

});

}

public void OnGetCustomerResponse(NetClient client, GetCustomerResponse e) {

mCustomers = e.getItemsList();

}

public void OnGetEmployeeResponse(NetClient client, GetEmployeeResponse e) {

mEmployees = e.getItemsList();

}

public void OnOrderSearchRespnose(NetClient client, OrderSearchResponse e) {

final List orders = e.getItemsList();

mPages = e.getPages();

mHandler.post(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

mOrderViewAdapter.clear();

for (Order item : orders) {

mOrderViewAdapter.add(item);

}

mOrderViewAdapter.notifyDataSetChanged();

}

});

}

复制代码

通过调用以下方法则可以自动切入到相关消息方法中.

@Override

public void Receive(NetClient client, Object msg) {

Controller.Invoke(this, mClient, msg);

}

复制代码

消息发送请求

GetCustomer.Builder getcusomer = GetCustomer.newBuilder();

mClient.Send(getcusomer.build());

GetEmployee.Builder getemployee = GetEmployee.newBuilder();

mClient.Send(getemployee.build());

复制代码

功能截图

%3D&noupdate=yes

%3D&noupdate=yes

下载代码:

Beetle.NetPackage官网:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值