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

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

协议定义

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

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;
}

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

通信定义

        Beetle.NetPackage基础通信都已经封装好了,因此使用起来很是简单,probotuf的注册和建立相应的TCP链接只须要几行代码便可 github

        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功能,所以只须要定义相关消息类型的方法便可. ide

    public void OnGetOrderDetali(NetClient client, GetOrderDetailResponse e) {
		final List<OrderDetail> 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<Order> 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();
			}
		});
	}


        经过调用如下方法则能够自动切入到相关消息方法中. post

        @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());

功能截图

          

        

下载代码

         下载 ui

Beetle.NetPackage官网

        https://beetlenp.codeplex.com/ this

*--------------------------------------
*我的站:www.ikende.com www.asquestion.com              
*我的开源项目github.com/IKende             
*--------------------------------------* spa

相关文章
相关标签/搜索