From 45030adc9139aeaf0e5496ed64dc1068bd6cf43c Mon Sep 17 00:00:00 2001 From: zhaolizhi <499531245@qq.com> Date: Tue, 2 Oct 2018 21:00:08 +0800 Subject: [PATCH] utils --- README.md | 60 ++- .../nutritionmaster/bean/Illness.java | 9 +- .../nutritionmaster/bean/MyUser.java | 432 ++++++++++++++++-- .../nutritionmaster/bean/Trick.java | 48 ++ .../nutritionmaster/utils/WebUtils.java | 360 +++++++++++---- 5 files changed, 790 insertions(+), 119 deletions(-) create mode 100644 app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Trick.java diff --git a/README.md b/README.md index d96e3e6..e4bf6bb 100644 --- a/README.md +++ b/README.md @@ -123,15 +123,61 @@ 赵: -* 体质表: 添加几列对某种物质的需求 -* 职业表: 添加几列对某种物质的需求,添加一列BMI的需求 -* user表: 添加综合对物质的需求 +* 体质表: 添加几列对某种物质的需求 √ + +* 职业表: 添加几列对某种物质的需求,添加一列BMI的需求 √ + +* user表: 添加综合对物质的需求 √ + * 菜单表: - * 添加一列早/午晚餐,早为1,else为0. 根据 饼 粥 羹 面 奶 判断 - * 补充一下缺失的url,卡路里 - * 添加几列各种物质的需求 + * **添加一列早/午晚餐,早为1,else为0. 根据 饼 粥 羹 面 奶 判断** + * 补充一下缺失的url,卡路里 √ + * 添加几列各种物质的需求 √ * 有一部分数据是爬下的csv里面直接读取,一部分缺失的用food_material的组合来计算 +* **对接任务**: 接口使用方法可以参尻main函数里面的注释和数据库ER图 + + * WebUtil改成了单例,一些方法注意一下 + + * 注册: `createUser`.注意年龄应该让用户填出生年,获取年龄时每次都根据年份计算一下 + + * 直接set设置用户的各种信息,不需要的就空着不用set,特殊的一点是病有多个值,要用一个List + + ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvu5tfi47aj30mv0gg403.jpg) + + * 修改用户信息 `changeUserInfo`,注意username必须设置,其他的是需要改的值.**修改会覆盖之前的内容**.比如用户之前illness是健忘食谱,想增加一个高血压食谱, 就需要把之前的也写上,就是一起传 `健忘食谱,高血压食谱`这两个参数.写到List里面. 具体参考main函数里面的 + + * 获取九体信息 `getPhysique`方法 + + * 获取用户营养元素所需的量: 先`getUser`获取到用户的病/职业/体质名字,然后根据这些名字查询每个 病/职业/体质信息对应的元素需求,最后加权计算 (这里是不是麻烦了点?) + + * 用户职业BMI分类 3多动,2中等,1少动 先 `getUser`获取到用户的职业名字.然后`getOccupation`获取到该职业的BMI分类 + + * 动态改变用户已吃的营养元素的量: 在用户表添加element参数,每周清空一次,每吃一个菜就记录一下 + + * 获取用户本周已摄入的营养元素的量: `getUser`得到当前用户的信息,解析后用`MyUser`的`getEaten_elements()`获取到Element对象.里面有各种元素信息 + * 每吃一个菜就post一下 + + ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvsze639cyj30k507vaa9.jpg) + + * **用户的浏览历史: 添加用户和菜谱的多对多关系** + + * 菜名搜索: `getMenu`方法,传入菜名(菜名通过其他的各种关联方式获取) (menu.calorie是直接爬到的卡路里值,营养元素里的menu.elements.calorie卡路里是根据每个食材的卡路里计算的,相对来说,menu.calorie的值更准确) + + * 功效搜菜 `getMenuClassification`传入分类(功效)参数,比如川菜.搜到所有的川菜名字.然后可以用菜名搜索搜某个菜的详细信息 + + * **营养量搜菜 : 搜索某个营养量范围内的菜** + + * **季节搜菜** + + * 小知识获取 : `getRandomTricks` + + + +![1538310994730](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1538310994730.png) + +![1538313835249](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1538313835249.png) + #### 又想到的补充内容 @@ -141,7 +187,7 @@ ### 数据库设计 -![](http://ww1.sinaimg.cn/large/0077h8xtly1fuz0a6yb4gj30z10hl1kx.jpg) +![](http://ww1.sinaimg.cn/large/0077h8xtly1fvu67fbm8qj312f0sux6p.jpg) **加下划线为主码,加粗为外码,默认not null** diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Illness.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Illness.java index 8946580..fa90a81 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Illness.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Illness.java @@ -2,7 +2,6 @@ package com.example.ninefourone.nutritionmaster.bean; import java.util.List; - public class Illness { /** @@ -29,6 +28,14 @@ public class Illness { this.elements = elements; } + @Override + public String toString() { + return "Illness{" + + "menu_classification=" + menu_classification + + ", elements=" + elements + + '}'; + } + public static class MenuClassificationBean { /** * classification : 青少年食谱 diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java index 1ea341e..c95884d 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java @@ -5,40 +5,80 @@ import java.util.List; public class MyUser { /** - * id : 7 - * physical_name : 平和质 - * password : password + * id : 2 + * eaten_elements : {"id":12127,"calorie":1046,"carbohydrate":33.56923076923077,"fat":17.138461538461538,"protein":13.492307692307692,"cellulose":5.723076923076923,"vitaminA":16.307692307692307,"vitaminB1":0,"vitaminB2":0.16,"vitaminB6":0,"vitaminC":9.692307692307692,"vitaminE":7.483076923076923,"carotene":84.61538461538461,"cholesterol":29.692307692307693,"Mg":116.61538461538461,"Ca":230.76923076923077,"Fe":7.523076923076923,"Zn":1.209230769230769,"Cu":0.4138461538461539,"Mn":1.5138461538461538,"K":285.6923076923077,"P":92,"Na":15580.876923076923,"Se":7.636923076923078,"niacin":1.169230769230769,"thiamine":0.06307692307692307} + * physical_name : 瘀血质 + * password : updata * last_login : null * is_superuser : false - * username : okhttptest + * username : updatatest * first_name : * last_name : * email : * is_staff : false * is_active : false - * date_joined : 2018-09-24T15:13:09.298590+08:00 + * date_joined : 2018-09-16T20:21:40.466423+08:00 * sex : 1 - * occupation_name : 程序员 + * age : 0 + * height : 0 + * weight : 0 + * bmi : -1 + * occupation_name : null * groups : [] * user_permissions : [] + * illness : [] */ - private int id; + private Integer id; + private EatenElementsBean eaten_elements; private String physical_name; private String password; private Object last_login; - private boolean is_superuser; + private Boolean is_superuser; private String username; private String first_name; private String last_name; private String email; - private boolean is_staff; - private boolean is_active; + private Boolean is_staff; + private Boolean is_active; private String date_joined; - private int sex; - private String occupation_name; + private Integer sex; + private Integer age; + private Integer height; + private Integer weight; + private Integer bmi; + private Object occupation_name; private List groups; private List user_permissions; + private List illness; + + @Override + public String toString() { + return "MyUser{" + + "id=" + id + + ", eaten_elements=" + eaten_elements + + ", physical_name='" + physical_name + '\'' + + ", password='" + password + '\'' + + ", last_login=" + last_login + + ", is_superuser=" + is_superuser + + ", username='" + username + '\'' + + ", first_name='" + first_name + '\'' + + ", last_name='" + last_name + '\'' + + ", email='" + email + '\'' + + ", is_staff=" + is_staff + + ", is_active=" + is_active + + ", date_joined='" + date_joined + '\'' + + ", sex=" + sex + + ", age=" + age + + ", height=" + height + + ", weight=" + weight + + ", bmi=" + bmi + + ", occupation_name=" + occupation_name + + ", groups=" + groups + + ", user_permissions=" + user_permissions + + ", illness=" + illness + + '}'; + } public int getId() { return id; @@ -48,6 +88,14 @@ public class MyUser { this.id = id; } + public EatenElementsBean getEaten_elements() { + return eaten_elements; + } + + public void setEaten_elements(EatenElementsBean eaten_elements) { + this.eaten_elements = eaten_elements; + } + public String getPhysical_name() { return physical_name; } @@ -144,11 +192,43 @@ public class MyUser { this.sex = sex; } - public String getOccupation_name() { + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public int getBmi() { + return bmi; + } + + public void setBmi(int bmi) { + this.bmi = bmi; + } + + public Object getOccupation_name() { return occupation_name; } - public void setOccupation_name(String occupation_name) { + public void setOccupation_name(Object occupation_name) { this.occupation_name = occupation_name; } @@ -168,25 +248,309 @@ public class MyUser { this.user_permissions = user_permissions; } - @Override - public String toString() { - return "MyUser{" + - "id=" + id + - ", physical_name='" + physical_name + '\'' + - ", password='" + password + '\'' + - ", last_login=" + last_login + - ", is_superuser=" + is_superuser + - ", username='" + username + '\'' + - ", first_name='" + first_name + '\'' + - ", last_name='" + last_name + '\'' + - ", email='" + email + '\'' + - ", is_staff=" + is_staff + - ", is_active=" + is_active + - ", date_joined='" + date_joined + '\'' + - ", sex=" + sex + - ", occupation_name='" + occupation_name + '\'' + - ", groups=" + groups + - ", user_permissions=" + user_permissions + - '}'; + public List getIllness() { + return illness; + } + + public void setIllness(List illness) { + this.illness = illness; + } + + public static class EatenElementsBean { + /** + * id : 12127 + * calorie : 1046 + * carbohydrate : 33.56923076923077 + * fat : 17.138461538461538 + * protein : 13.492307692307692 + * cellulose : 5.723076923076923 + * vitaminA : 16.307692307692307 + * vitaminB1 : 0 + * vitaminB2 : 0.16 + * vitaminB6 : 0 + * vitaminC : 9.692307692307692 + * vitaminE : 7.483076923076923 + * carotene : 84.61538461538461 + * cholesterol : 29.692307692307693 + * Mg : 116.61538461538461 + * Ca : 230.76923076923077 + * Fe : 7.523076923076923 + * Zn : 1.209230769230769 + * Cu : 0.4138461538461539 + * Mn : 1.5138461538461538 + * K : 285.6923076923077 + * P : 92 + * Na : 15580.876923076923 + * Se : 7.636923076923078 + * niacin : 1.169230769230769 + * thiamine : 0.06307692307692307 + */ + + private double id; + private double calorie; + private double carbohydrate; + private double fat; + private double protein; + private double cellulose; + private double vitaminA; + private double vitaminB1; + private double vitaminB2; + private double vitaminB6; + private double vitaminC; + private double vitaminE; + private double carotene; + private double cholesterol; + private double Mg; + private double Ca; + private double Fe; + private double Zn; + private double Cu; + private double Mn; + private double K; + private double P; + private double Na; + private double Se; + private double niacin; + private double thiamine; + + @Override + public String toString() { + return "EatenElementsBean{" + + "id=" + id + + ", calorie=" + calorie + + ", carbohydrate=" + carbohydrate + + ", fat=" + fat + + ", protein=" + protein + + ", cellulose=" + cellulose + + ", vitaminA=" + vitaminA + + ", vitaminB1=" + vitaminB1 + + ", vitaminB2=" + vitaminB2 + + ", vitaminB6=" + vitaminB6 + + ", vitaminC=" + vitaminC + + ", vitaminE=" + vitaminE + + ", carotene=" + carotene + + ", cholesterol=" + cholesterol + + ", Mg=" + Mg + + ", Ca=" + Ca + + ", Fe=" + Fe + + ", Zn=" + Zn + + ", Cu=" + Cu + + ", Mn=" + Mn + + ", K=" + K + + ", P=" + P + + ", Na=" + Na + + ", Se=" + Se + + ", niacin=" + niacin + + ", thiamine=" + thiamine + + '}'; + } + + public double getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public double getCalorie() { + return calorie; + } + + public void setCalorie(int calorie) { + this.calorie = calorie; + } + + public double getCarbohydrate() { + return carbohydrate; + } + + public void setCarbohydrate(double carbohydrate) { + this.carbohydrate = carbohydrate; + } + + public double getFat() { + return fat; + } + + public void setFat(double fat) { + this.fat = fat; + } + + public double getProtein() { + return protein; + } + + public void setProtein(double protein) { + this.protein = protein; + } + + public double getCellulose() { + return cellulose; + } + + public void setCellulose(double cellulose) { + this.cellulose = cellulose; + } + + public double getVitaminA() { + return vitaminA; + } + + public void setVitaminA(double vitaminA) { + this.vitaminA = vitaminA; + } + + public double getVitaminB1() { + return vitaminB1; + } + + public void setVitaminB1(int vitaminB1) { + this.vitaminB1 = vitaminB1; + } + + public double getVitaminB2() { + return vitaminB2; + } + + public void setVitaminB2(double vitaminB2) { + this.vitaminB2 = vitaminB2; + } + + public double getVitaminB6() { + return vitaminB6; + } + + public void setVitaminB6(int vitaminB6) { + this.vitaminB6 = vitaminB6; + } + + public double getVitaminC() { + return vitaminC; + } + + public void setVitaminC(double vitaminC) { + this.vitaminC = vitaminC; + } + + public double getVitaminE() { + return vitaminE; + } + + public void setVitaminE(double vitaminE) { + this.vitaminE = vitaminE; + } + + public double getCarotene() { + return carotene; + } + + public void setCarotene(double carotene) { + this.carotene = carotene; + } + + public double getCholesterol() { + return cholesterol; + } + + public void setCholesterol(double cholesterol) { + this.cholesterol = cholesterol; + } + + public double getMg() { + return Mg; + } + + public void setMg(double Mg) { + this.Mg = Mg; + } + + public double getCa() { + return Ca; + } + + public void setCa(double Ca) { + this.Ca = Ca; + } + + public double getFe() { + return Fe; + } + + public void setFe(double Fe) { + this.Fe = Fe; + } + + public double getZn() { + return Zn; + } + + public void setZn(double Zn) { + this.Zn = Zn; + } + + public double getCu() { + return Cu; + } + + public void setCu(double Cu) { + this.Cu = Cu; + } + + public double getMn() { + return Mn; + } + + public void setMn(double Mn) { + this.Mn = Mn; + } + + public double getK() { + return K; + } + + public void setK(double K) { + this.K = K; + } + + public double getP() { + return P; + } + + public void setP(int P) { + this.P = P; + } + + public double getNa() { + return Na; + } + + public void setNa(double Na) { + this.Na = Na; + } + + public double getSe() { + return Se; + } + + public void setSe(double Se) { + this.Se = Se; + } + + public double getNiacin() { + return niacin; + } + + public void setNiacin(double niacin) { + this.niacin = niacin; + } + + public double getThiamine() { + return thiamine; + } + + public void setThiamine(double thiamine) { + this.thiamine = thiamine; + } } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Trick.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Trick.java new file mode 100644 index 0000000..9d66acc --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Trick.java @@ -0,0 +1,48 @@ +package com.example.ninefourone.nutritionmaster.bean; + +public class Trick { + + /** + * id : 124 + * title : 一天喝一杯红酒 真能降血脂降固醇吗 + * content : 随着高血脂、高固醇患者人数不但增长,关于如何对这类疾病进行有效地预防,成了越来越多人关注的问题,坊间关于预防的方式也多种多样,让人眼花缭乱,真假难辨。其中每天坚持喝一杯 + 能降血脂降固醇的说法被很多人奉为圭臬,并在生活中践行。 + 事实果真如此吗?红酒有这么突出的功效吗?下面为大家详细解答一番。 + 首先,可以确定的是,红酒的确是一种健康饮品,它含有丰富的营养物质, + 功效也不容忽视。红酒中所含的多酚、白藜芦醇、花色苷等营养物质,的确有助于降低体内的胆固醇、血脂;非但如此,这些物质还能起到软化血管的作用;此外,红酒中的有机酸,还能增强我们的消化系统,帮助我们消化食物。再者,红酒中含有的多酚、黄酮等植物化学成分,有助于清除体内自由基,预防衰老。 + 由此可见,饮用红酒的确对我们降脂、降固醇有很大的帮助,但是要想完全通过每天一杯红酒的方式实现预防目的,并不可取,因为红酒虽好,但同样存在下面这些隐患。 + 首先对红酒的选择,市场上各种质量的红酒类型鱼目混杂,如果选择了低劣的红酒,不但不能起到养生作用,反而会危害健康;此外,红酒中含有酒精,一旦饮用过量,对高血脂、高固醇患者的健康也会造成影响;再者,红酒中能降血脂、降固醇的营养物质含量较低,每天仅喝一杯,很难奏效。 + 可见,仅仅通过每天饮用一杯红酒的方式降血脂、降固醇并不是明智之选。那么,还有哪些方式可以帮助我们更好地实现养生目标呢? + 在日常饮食方面,做到膳食结构完整,营养摄入全面,保证肉质、蔬菜、水果、蛋类等各类食材的均衡摄入;再此基础上,减少食盐、食用油的摄入量,还可以尝试用鸡肉、鱼肉等“白肉”取代猪肉等“红肉”。 + 高血脂、高固醇的出现,和体内过量的脂肪密不可分,每天坚持适量的体育锻炼,将体内多余的热量和脂肪消耗掉,对降低体内的血脂、固醇也大有裨益。 + 养生是一个循序渐进的过程,不能急功近利,更不能偏信,某一种食材具有特殊功效这种说法,只有长期坚持健康的生活方式才能拥有健康的身体。 + */ + + private int id; + private String title; + private String content; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java index 56946b2..ab6201c 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java @@ -1,10 +1,14 @@ package com.example.ninefourone.nutritionmaster.utils; - -import android.support.annotation.Nullable; +import com.google.gson.Gson; +import com.sun.istack.internal.Nullable; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import model.MyUser; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; @@ -13,9 +17,19 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -public class WebUtils { +public class WebUtil { + private static WebUtil instance = new WebUtil(); + private OkHttpClient mClient = new OkHttpClient(); + + private WebUtil() { + } + + public static WebUtil getInstance() { + return instance; + } + /** - * 获取菜谱信息 + * 获取具体的菜谱信息 * { * "flavor": "咸鲜味", * "calorie": 234, @@ -35,52 +49,34 @@ public class WebUtils { * }, * } */ - public static void getMenu(String menuName, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + public void getMenu(String menuName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/menus/" + menuName + "/").build(); mClient.newCall(request).enqueue(callback); } /** - * 获取病相关的菜谱和元素信息 - * 传入含有病的意义的菜谱分类名称,比如青少年食谱 + * 获取count个随机菜谱,在回调中解析为一个Menu数组 * - * { - * "menu_classification": { - * "classification": "青少年食谱", - * "cure_occupation": [ - * "学生" - * ], - * "menu_effect": [ - * "三鲜鳝汤", - * "上海糖醋小排骨", - * ... - * ] - * }, - * "elements": { - * "id": 84, - * "calorie": 1.1, - * ... - * } - * } + * @param count + * @param callback */ - public static void getIllness(String illnessClassification, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); - Request request = new Request.Builder().url("http://120.77.182.38/illness/" + illnessClassification + "/").build(); + public void getRandomMenus(int count, Callback callback) { + Request request = new Request.Builder().url("http://127.0.0.1:8000/menus/get_random_menus/?count=" + String.valueOf(count)).build(); mClient.newCall(request).enqueue(callback); } /** - * 获取count个随机菜谱,在回调中解析为一个Menu数组 + * 随机获取一定数量的小知识 + * * @param count * @param callback */ - public static void getRandomMenus(int count, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); - Request request = new Request.Builder().url("http://127.0.0.1:8000/menus/get_random_menus/?count=" + String.valueOf(count)).build(); + public void getRandomTricks(int count, Callback callback) { + Request request = new Request.Builder().url("http://127.0.0.1:8000/trick/get_random_tricks/?count=" + String.valueOf(count)).build(); mClient.newCall(request).enqueue(callback); } + /** * 获取某食材可以做的菜 * [ @@ -104,8 +100,7 @@ public class WebUtils { * @param materialName * @param callback */ - public static void getFoodMaterial(String materialName, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + public void getFoodMaterial(String materialName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/foodmaterial/" + materialName + "/").build(); mClient.newCall(request).enqueue(callback); } @@ -130,8 +125,7 @@ public class WebUtils { * "冬苋菜豆腐汤", * "冬菜排骨汤", */ - public static void getMenuClassification(String classificationName, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + public void getMenuClassification(String classificationName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/menuclassification/" + classificationName + "/").build(); mClient.newCall(request).enqueue(callback); } @@ -149,8 +143,7 @@ public class WebUtils { * ] * } */ - public static void getOccupation(String occupationName, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + public void getOccupation(String occupationName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/occupation/" + occupationName + "/").build(); mClient.newCall(request).enqueue(callback); } @@ -169,21 +162,48 @@ public class WebUtils { * ] * } */ - public static void getPhysique(String physiqueName, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + public void getPhysique(String physiqueName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/physique/" + physiqueName + "/").build(); mClient.newCall(request).enqueue(callback); } - public static void getUser(String username, Callback callback) { - OkHttpClient mClient = new OkHttpClient(); + /** + * 获取病相关的菜谱和元素信息 + * 传入含有病的意义的菜谱分类名称,比如青少年食谱 + *

+ * { + * "menu_classification": { + * "classification": "青少年食谱", + * "cure_occupation": [ + * "学生" + * ], + * "menu_effect": [ + * "三鲜鳝汤", + * "上海糖醋小排骨", + * ... + * ] + * }, + * "elements": { + * "id": 84, + * "calorie": 1.1, + * ... + * } + * } + */ + public void getIllness(String illnessClassification, Callback callback) { + Request request = new Request.Builder().url("http://120.77.182.38/illness/" + illnessClassification + "/").build(); + mClient.newCall(request).enqueue(callback); + } + + public void getUser(String username, Callback callback) { + mClient = new OkHttpClient(); Request request = new Request.Builder().url("http://120.77.182.38/myuser/" + username + "/").build(); mClient.newCall(request).enqueue(callback); } /** * 注意在回调中处理username重复的情况 - */ + *//* public static void postUser(String username, String password, String sex, @Nullable String occupationName, @Nullable String physicalName, Callback callback) { RequestBody formBody = new FormBody.Builder() .add("username", username) @@ -199,9 +219,9 @@ public class WebUtils { OkHttpClient mClient = new OkHttpClient(); mClient.newCall(request).enqueue(callback); - } + }*/ - public static void changeUserPassword(String username, String password, Callback callback) { + /*public static void changeUserPassword(String username, String password, Callback callback) { String url = "http://120.77.182.38/myuser/" + username + "/"; RequestBody formBody = new FormBody.Builder() .add("username", username) @@ -210,50 +230,234 @@ public class WebUtils { Request request = new Request.Builder() .url(url) - .put(formBody) + .patch(formBody) .build(); OkHttpClient mClient = new OkHttpClient(); mClient.newCall(request).enqueue(callback); } - public static void changeUserOccupation(String username,String password, String occupation, Callback callback) { + *//** + * 修改职业 + * 传入职业名称参数 + *//* + public static void changeUserOccupation(String username, String occupation, Callback callback) { String url = "http://120.77.182.38/myuser/" + username + "/"; RequestBody formBody = new FormBody.Builder() .add("username", username) - .add("password",password) .add("occupation", occupation) .build(); Request request = new Request.Builder() .url(url) - .put(formBody) + .patch(formBody) .build(); OkHttpClient mClient = new OkHttpClient(); mClient.newCall(request).enqueue(callback); } - public static void changeUserPhysique(String username,String password, String physique, Callback callback) { + *//** + * 修改体质 + * + * @param physique 体质名称 + *//* + public static void changeUserPhysique(String username, String physique, Callback callback) { String url = "http://120.77.182.38/myuser/" + username + "/"; RequestBody formBody = new FormBody.Builder() .add("username", username) - .add("password",password) .add("physique", physique) .build(); Request request = new Request.Builder() .url(url) - .put(formBody) + .patch(formBody) .build(); OkHttpClient mClient = new OkHttpClient(); mClient.newCall(request).enqueue(callback); } + */ + /** + public static void changeUserIllness(String username, String[] illnesses, Callback callback) { + String url = "http://120.77.182.38/myuser/" + username + "/"; + + FormBody.Builder builder = new FormBody.Builder(); + for (String illness : illnesses) { + builder.add("illness", illness); + } + RequestBody formBody = builder.build(); + + Request request = new Request.Builder() + .url(url) + .patch(formBody) + .build(); + + OkHttpClient mClient = new OkHttpClient(); + mClient.newCall(request).enqueue(callback); + }*/ + private static RequestBody buildUserRequestBody(MyUser user) { + try { + FormBody.Builder builder = new FormBody.Builder(); + + Class c = Class.forName("model.MyUser"); + Field[] fields = c.getDeclaredFields(); + for (Field f : fields) { + String fieldName = f.toString().substring(f.toString().lastIndexOf(".") + 1); + f.setAccessible(true); + Object object = f.get(user);//获取属性的值 + if (object != null ) { + //illness属性是一个list,需要加入每个list的值,而不是list对象 + if (fieldName.equals("illness")) { + List illnessList = (List) object; + for (String ill : illnessList) { + builder.add("illness", ill); + } + } else { + builder.add(fieldName, String.valueOf(object)); + } + + } + } + RequestBody formBody = builder.build(); +// for (int i = 0; i < ((FormBody) formBody).size(); i++) { +// System.out.println(((FormBody) formBody).name(i) + " : " + ((FormBody) formBody).value(i)); +// } + return formBody; + + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 注册用户注意username必须要有 + * + * @param user + */ + public void createUser(MyUser user, Callback callback) { + String url = "http://120.77.182.38/myuser/"; + RequestBody formBody = buildUserRequestBody(user); + Request request = new Request.Builder() + .url(url) + .post(formBody) + .build(); + + mClient.newCall(request).enqueue(callback); + } + + /** + * 把user要更新的信息传入, 注意username必须要有 + * + * @param user + */ + public void changeUserInfo(MyUser user, Callback callback) { + String url = "http://120.77.182.38/myuser/" + user.getUsername() + "/"; + RequestBody formBody = buildUserRequestBody(user); + Request request = new Request.Builder() + .url(url) + .patch(formBody) + .build(); + + mClient.newCall(request).enqueue(callback); + } + + /** + * 用户吃了一个菜,更新用户本周已吃摄入的营养元素的量 + * 返回当前user的最新信息,用MyUser类解析json + * @param username + * @param menuName + */ + public void eatenMenu(String username, String menuName,Callback callback) { + String url = "http://120.77.182.38/myuser/eaten_menu/"; + RequestBody formBody = new FormBody.Builder() + .add("username", username) + .add("menu_name", menuName) + .build(); + Request request = new Request.Builder() + .url(url) + .post(formBody) + .build(); + mClient.newCall(request).enqueue(callback); + } + public static void main(String[] args) { - /*WebUtils.getMenu("雪丽对虾", new Callback() { +/* + MyUser testUser = new MyUser(); + testUser.setUsername("test6"); + testUser.setPassword("66666"); + testUser.setAge(8); + testUser.setHeight(175); + testUser.setPhysical_name("平和质"); + List ills = new ArrayList<>(); + ills.add("乌发食谱"); + ills.add("失眠食谱"); + testUser.setIllness(ills); + + //创建用户 + WebUtil.getInstance().createUser(testUser, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String responseJson = response.body().string(); + System.out.println(new Gson().fromJson(responseJson, MyUser.class)); + } + }); + + //修改用户信息 + WebUtil.getInstance().changeUserInfo(testUser, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + System.out.println(new Gson().fromJson(response.body().string(), MyUser.class)); + } + });*/ + + + + /*WebUtil.getInstance().eatenMenu("test5", "软熘虾片", new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String responseJson = response.body().string(); + System.out.println(responseJson); + MyUser testUser = new Gson().fromJson(responseJson, MyUser.class); + System.out.println(testUser); + } + });*/ + + /*WebUtil.getIllness("青少年食谱", new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + System.out.println(new Gson().fromJson(response.body().string(),Illness.class)); + } + });*/ + + + /* WebUtil.getMenu("雪丽对虾", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -281,7 +485,7 @@ public class WebUtils { } });*/ - /* WebUtils.getFoodMaterial("西红柿", new Callback() { + /*WebUtil.getFoodMaterial("西红柿", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -290,12 +494,12 @@ public class WebUtils { @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); - FoodMaterial[] foodMaterialList = new Gson().fromJson(json, FoodMaterial[].class); - System.out.println(Arrays.toString(foodMaterialList)); + FoodMaterial foodMaterial = new Gson().fromJson(json, FoodMaterial.class); + System.out.println(foodMaterial); } });*/ - /*WebUtils.getMenuClassification("川菜", new Callback() { + /*WebUtil.getMenuClassification("川菜", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -308,7 +512,7 @@ public class WebUtils { } });*/ - /*WebUtils.getOccupation("程序员", new Callback() { + /*WebUtil.getOccupation("程序员", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -316,11 +520,13 @@ public class WebUtils { @Override public void onResponse(Call call, Response response) throws IOException { - System.out.println(response.body().string()); + String json = response.body().string(); + System.out.println(new Gson().fromJson(json, Occupation.class)); + } });*/ - /*WebUtils.getPhysique("气虚质", new Callback() { + /*WebUtil.getPhysique("气虚质", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -328,11 +534,11 @@ public class WebUtils { @Override public void onResponse(Call call, Response response) throws IOException { - System.out.println(new Gson().fromJson(response.body().string(),Physique.class)); + System.out.println(new Gson().fromJson(response.body().string(), Physique.class)); } });*/ - /*WebUtils.getUser("okhttptest", new Callback() { + /*WebUtil.instance.getUser("test5", new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -340,21 +546,21 @@ public class WebUtils { @Override public void onResponse(Call call, Response response) throws IOException { - System.out.println(new Gson().fromJson(response.body().string(),MyUser.class)); - } - });*/ - - WebUtils.changeUserOccupation("updatatest","1234" ,"气虚质", new Callback() { - @Override - public void onFailure(Call call, IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - System.out.println(response.body().string()); + System.out.println(new Gson().fromJson(response.body().string(), MyUser.class)); } }); +*/ + + /* WebUtil.getRandomTricks(10, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + System.out.println(response.body().string()); + } + });*/ } } -