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

相關文章
相關標籤/搜索