您的位置:首页 > 移动开发 > Android开发

android自助点单APP(1)Fastjson解析

2015-04-27 23:09 826 查看
自己父母经营着一个小吃店铺,生意忙的时候点菜往往是来不及,尤其碰到个别点单比较慢的顾客。。从0开始学习android也有一段时间了,也该写点东西出来。于是构思了这个APP。初步设想是使用二维码在店铺内进行宣传,顾客扫描二维码下载安装app,然后进行点单。同时考虑到ios用户,这就需要使用web或者ios客户端,可惜心有余而力不足,这一部分项目可能要延后了。。

进入正文,APP使用Http协议与web服务器进行交流,在首次每次打开客户端时会首先连接服务器下载FoodMenu菜单,此处用到json解析。

首先建立Food.java以及FoodJSONObject.java。

首先下载Fastjson,这个随便度娘一下就有了。需要注意的是最好将javadoc以及source一起下载了,不然木有注释。。。

也可以在我这里下载http://download.csdn.net/detail/lvkang20050063/8639319

Food类

package com.lvkang.myfoodtoandroid.json;

import java.io.Serializable;

public class Food implements Serializable {

private static final long serialVersionUID = 1L;

//定义各种属性的字符串,后面会用到。
public static final String FOOD_ID = "foodId";
public static final String FOOD_NAME = "foodName";
public static final String FOOD_UNIT_PRICE = "foodUnitPrice";
public static final String FOOD_REMAIN = "foodRemain";
public static final String FOOD_REMARKS = "foodRemarks";
public static final String FOOD_ATTR = "foodAttr";

//定义成员变量(foodRemarks这个变量命名有点不妥。。。)
int foodId;
String foodName;
float foodUnitPrice;
int foodRemain;
String foodRemarks;
int foodAttr;

//使用fastjson解析式一定要用默认的构造函数,不然会报异常。
public Food() {

}

//这个构造函数后面一直没用到,瞎了。。。
Food(int foodId, String foodName, float foodUnitPrice, int foodRemain,
String foodRemarks, int foodAttr) {
this.foodId = foodId;
this.foodName = foodName;
this.foodUnitPrice = foodUnitPrice;
this.foodRemain = foodRemain;
this.foodRemarks = foodRemarks;
this.foodAttr = foodAttr;
}

//方便一些测试
@Override
public String toString() {

return "foodId: " + foodId + "foodName: " + foodName
+ "foodUnitPrice: " + foodUnitPrice + "foodRemain: "
+ foodRemain + "foodRemarks: " + foodRemarks + "foodAttr: "
+ foodAttr;

}

//很无聊的getter和setter直接用工具生成。。。
public int getFoodId() {
return foodId;
}

public void setFoodId(int foodId) {
this.foodId = foodId;
}

public String getFoodName() {
return foodName;
}

public void setFoodName(String foodName) {
this.foodName = foodName;
}

public float getFoodUnitPrice() {
return foodUnitPrice;
}

public void setFoodUnitPrice(float foodUnitPrice) {
this.foodUnitPrice = foodUnitPrice;
}

public int getfoodRemain() {
return foodRemain;
}

public void setfoodRemain(int foodRemain) {
this.foodRemain = foodRemain;
}

public String getFoodRemarks() {
return foodRemarks;
}

public void setFoodRemarks(String foodRemarks) {
this.foodRemarks = foodRemarks;
}

public int getAttr() {
return foodAttr;
}

public void setAttr(int foodAttr) {
this.foodAttr = foodAttr;
}

}


FoodJSONObject类

package com.lvkang.myfoodtoandroid.json;

import java.util.ArrayList;
import java.util.List;

public class FoodJSONObject {
private int id = 0;

public FoodJSONObject() {

}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public List<Food> getFoodList() {
return foodList;
}

public void setFoodList(List<Food> foodList) {
this.foodList = foodList;
}

private List<Food> foodList = new ArrayList<Food>();

}


其实就是将Food作为一个List保存在FoodJSONObject中,当然其中还能增加很多属性。

以上就是foodmenu使用json在object类和string字符串之间转化需要的类文件。

FoodOrder类

package com.lvkang.myfood.json;

import java.io.Serializable;

public class OrderFood implements Serializable {

private static final long serialVersionUID = 2L;

public static final String Order_FOOD_ID = "orderFoodId";
public static final String Order_FOOD_NAME = "orderFoodName";
public static final String Order_FOOD_UNIT_PRICE = "orderFoodUnitPrice";
// public static final String Order_FOOD_REMAIN = "orderFoodRemain";
// public static final String Order_FOOD_REMARKS = "orderFoodRemarks";
public static final String Order_FOOD_ATTR = "orderFoodAttr";
public static final String Order_FOOD_NUM = "orderFoodNum";

private int orderFoodId;
private String orderFoodName;
private float orderFoodUnitPrice;
// int orderFoodRemain;
// String orderFoodRemarks;
private  int orderFoodAttr;
private int orderFoodNum;

// 使用fastjsony一定要注意要有无参构造函数。
OrderFood() {

}

OrderFood(int foodId, String foodName, float foodUnitPrice,int foodAttr, int orderFoodNum) {
this.orderFoodId = foodId;
this.orderFoodName = foodName;
this.orderFoodUnitPrice = foodUnitPrice;
// this.orderFoodRemain = foodRemain;
// this.orderFoodRemarks = foodRemarks;
this.orderFoodAttr = foodAttr;
this.orderFoodNum = orderFoodNum;
}

@Override
public String toString() {

// return "foodId: " + orderFoodId + "foodName: " + orderFoodName
// + "foodUnitPrice: " + orderFoodUnitPrice + "foodRemain: "
// + orderFoodRemain + "foodRemarks: " + orderFoodRemarks + "foodAttr: "
// + orderFoodAttr;

return "orderFoodId: " + orderFoodId +
" orderFoodName: "+orderFoodName+
" orderFoodnum: " + orderFoodNum+
" orderFoorUnitPrice: "+orderFoodUnitPrice+
" orderFoodAttr: "+orderFoodAttr;
}

public int getOrderFoodId() {
return orderFoodId;
}

public void setOrderFoodId(int orderFoodId) {
this.orderFoodId = orderFoodId;
}

public int getOrderFoodNum() {
return orderFoodNum;
}

public void setOrderFoodNum(int orderFoodNum) {
this.orderFoodNum = orderFoodNum;
}

public String getOrderFoodName() {
return orderFoodName;
}

public void setOrderFoodName(String orderFoodName) {
this.orderFoodName = orderFoodName;
}

public float getOrderFoodUnitPrice() {
return orderFoodUnitPrice;
}

public void setOrderFoodUnitPrice(float orderFoodUnitPrice) {
this.orderFoodUnitPrice = orderFoodUnitPrice;
}

public int getOrderFoodAttr() {
return orderFoodAttr;
}

public void setOrderFoodAttr(int orderFoodAttr) {
this.orderFoodAttr = orderFoodAttr;
}

}


OrderFoodJSONObject类

package com.lvkang.myfood.json;

import java.util.ArrayList;
import java.util.List;

public class OrderFoodJSONObject {
private int orderId;
private int orderTableId=-1;
private long  orderDateTime=-1l;
private String orderCustomerName="unkown";
private String orderRemarks=null;
private List<OrderFood> foodList = new ArrayList<OrderFood>();

public List<OrderFood> getOrderFoodList() {
return foodList;
}
public void setFoodList(List<OrderFood> foodList) {
this.foodList = foodList;
}
public int getOrderTableId() {
return orderTableId;
}
public void setOrderTableId(int orderTableId) {
this.orderTableId = orderTableId;
}
public long getOrderDateTime() {
return orderDateTime;
}
public void setOrderDateTime(long orderDateTime) {
this.orderDateTime = orderDateTime;
}
public String getOrderCustomerName() {
return orderCustomerName;
}
public void setOrderCustomerName(String orderCustomerName) {
this.orderCustomerName = orderCustomerName;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public List<OrderFood> getFoodList() {
return foodList;
}
public String getOrderRemarks() {
return orderRemarks;
}
public void setOrderRemarks(String orderRemarks) {
this.orderRemarks = orderRemarks;
}

}


这两个类文件是用于顾客点单之后将orderfood转化成string,服务器利用fastjson解析成对应的orderfood。这样就实现了业务的基本功能。

例如以下转换

Food food = new Food();

food.setAttr(result.getInt(Food.FOOD_ATTR));
food.setFoodId(result.getInt(Food.FOOD_ID));
food.setFoodName(result.getString(Food.FOOD_NAME));
food.setfoodRemain(result.getInt(Food.FOOD_REMAIN));
food.setFoodRemarks(result.getString(Food.FOOD_REMARKS));
food.setFoodUnitPrice(result.getFloat(Food.FOOD_UNIT_PRICE));
str_json = JSON.toJSONString(food);


此时str_json便是包含了这个food所有信息的字符串。

{'attr':0,'foodId':1,'foodName':'鸡腿','foodRemain':1,'foodRemarks':'元/一个','foodUnitPrice':5}


如果结合数据库,将多条food记录保存在字符串中就是如下代码:

FoodJSONObject fJO = new FoodJSONObject();
while (result.next()) {
Food food = new Food();

food.setAttr(result.getInt(Food.FOOD_ATTR));
food.setFoodId(result.getInt(Food.FOOD_ID));
food.setFoodName(result.getString(Food.FOOD_NAME));
food.setfoodRemain(result.getInt(Food.FOOD_REMAIN));
food.setFoodRemarks(result.getString(Food.FOOD_REMARKS));
food.setFoodUnitPrice(result.getFloat(Food.FOOD_UNIT_PRICE));
fJO.getFoodList().add(food);

}
String str="";
str=JSON.toJSONString(FJO,SerializerFeature.UseSingleQuotes);


包含两个food的字符串json处理结果如下

{'foodList':[{'attr':0,'foodId':1,'foodName':'鸡腿','foodRemain':1,'foodRemarks':'元/一个','foodUnitPrice':5},{'attr':0,'foodId':2,'foodName':'鸡翅','foodRemain':1,'foodRemarks':'元/两个','foodUnitPrice':5}],'id':0}


客户端收到该字符串后,调用

FoodJSONObject getfood = JSON.parseObject(stringJSON,
FoodJSONObject.class);

List<Food> foodList = getfood.getFoodList();


此时便得到了foodList,进一步使用

ArrayList<HashMap<String, Object>> foodMenuArrayList = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < foodList.size(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
Food food = new Food();

map.put(Food.FOOD_ID, foodList.get(i).getFoodId());
map.put(Food.FOOD_NAME, foodList.get(i).getFoodName());
map.put(Food.FOOD_UNIT_PRICE, foodList.get(i).getFoodUnitPrice());
map.put(Food.FOOD_REMAIN, foodList.get(i).getfoodRemain());
map.put(Food.FOOD_REMARKS,foodList.get(i).getFoodRemarks());map.put(Food.FOOD_ATTR,foodList.get(i).getAttr());map.put("number", 0);
foodMenuArrayList.add(map);
}


至此完成了从object到
ArrayList<HashMap<String, Object>>
的转化。

下一步我要做一个listView的适配器,将这个arraylist中的数据填充到自定义listview
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息