diff --git a/.gitignore b/.gitignore index 700b159..31936ec 100644 --- a/.gitignore +++ b/.gitignore @@ -163,6 +163,7 @@ fabric.properties ### AndroidStudio Patch ### !/gradle/wrapper/gradle-wrapper.jar - +app/src/main/java/.vscode +.vscode # End of https://www.gitignore.io/api/android,androidstudio \ No newline at end of file diff --git a/README.md b/README.md index 072073a..a635dc1 100644 --- a/README.md +++ b/README.md @@ -5,30 +5,6 @@ 仓库地址: https://github.com/wangtianrui/NutritionMaster -### 需求 - -* 针对特殊人群,提供饮食,药膳等方案 - * 查查各种病理对食物的禁忌和需求 -* 秦楚吉(1667787307) 17:41:35 - 1设置整体活动水平 低:大部分坐姿,中等:大部分站立,高:大部分步行,非常高:身体需要 - 2为每一个推荐菜品提供菜谱 - 3根据目标卡路里-食物卡路里+运动卡路里=剩余卡路里进行每日的卡路里限制 - 4区分了各类食物中蛋白质糖以及脂肪 - 5以日期作为日志进行记录 - 6分别针对增肌、减脂、塑形进行运动训练 - 7好友社区 - 8商城(健身之类) - * **写的什么jb玩意啊?** - -| 详细需求分析 | 备注 | 开发进度 | -| ------------ | ---- | ---- | -| | | | -| 为每一个推荐菜品提供菜谱 | | | -| | | | -| | | | - - - ### 数据分析 * 人体健康信息 @@ -141,7 +117,7 @@ * user表: 添加综合对物质的需求 √ * 菜单表: - * **添加一列早/午晚餐,早为1,else为0. 根据 饼 粥 羹 面 奶 判断** + * 添加一列早/午晚餐,早为1,else为0. 根据 饼 粥 羹 面 奶 判断 * 补充一下缺失的url,卡路里 √ * 添加几列各种物质的需求 √ * 有一部分数据是爬下的csv里面直接读取,一部分缺失的用food_material的组合来计算 @@ -164,19 +140,107 @@ * 用户职业BMI分类 3多动,2中等,1少动 先 `getUser`获取到用户的职业名字.然后`getOccupation`获取到该职业的BMI分类 - * 动态改变用户已吃的营养元素的量: 在用户表添加element参数,每周清空一次,每吃一个菜就记录一下 + * 动态改变用户已吃的营养元素的量: 在用户表添加element参数,每周自动清空一次 - * 获取用户本周已摄入的营养元素的量: `getUser`得到当前用户的信息,解析后用`MyUser`的`getEaten_elements()`获取到Element对象.里面有各种元素信息 - * 每吃一个菜就post一下 + * Map的可选参数: `[calorie,carbohydrate,fat ,protein,cellulose,vitaminA,vitaminB1,vitaminB2,vitaminB6,vitaminC,vitaminE,carotene,cholesterol,Mg,Ca,Fe,Zn,Cu,Mn,K ,P ,Na,Se,niacin ,thiamine]` - ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvsze639cyj30k507vaa9.jpg) + ```java + public static void main(String[] args) { + //只传入变动的参数就行. + //比如 这顿饭摄入了100卡路里,10脂肪.就这样写. + Map params = new HashMap<>(); + params.put("calorie", 100.0); + params.put("fat", 10.0); + + //第一个参数是username,第二个参数是摄入的营养元素值.可以看函数的源码,有注释 + WebUtil.getInstance().eatenElements("test5", params, 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)); + + } + }); + } + ``` - * **用户的浏览历史: 添加用户和菜谱的多对多关系** + * 获取用户本周已摄入的营养元素的量: `getUser`得到当前用户的信息,解析后用`MyUser`的`getEaten_elements()`获取到Element对象.里面有各种元素信息 + + * 根据多个食材组合来搜菜 + + ```java + List materialList = new ArrayList<>(); + materialList.add("黄瓜"); + materialList.add("茄子"); + // materialList.add("鸡蛋"); + WebUtil.getInstance().getMenusByMaterials(materialList, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + //必须判断状态码,如果为200说明正常,如果为404,说明这几个食材组合查询不到可以做的菜 + if (response.code() == 200) { + String json = response.body().string(); + FoodMenu[] menus = new Gson().fromJson(json, FoodMenu[].class); + System.out.println(menus); + for (FoodMenu menu : menus) { + System.out.println(menu.getName()); + } + } else { + System.out.println("查不到组合食材可以做的菜"); + } + } + }); + ``` + + * 用户的浏览历史: 添加用户和菜谱的多对多关系 + + ```java + //获取历史记录 传入username + WebUtil.getInstance().getEatenHistory("test5", new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + History[] histories = new Gson().fromJson(json, History[].class); + System.out.println(Arrays.toString(histories)); + } + }); + //添加历史记录 传入username 和 Menu的名字 + WebUtil.getInstance().addEatenHistory("test5", "多味茄子泥", new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + History history = new Gson().fromJson(json, History.class); + System.out.println(history); + } + }); + ``` * 菜名搜索: `getMenu`方法,传入菜名(菜名通过其他的各种关联方式获取) (menu.calorie是直接爬到的卡路里值,营养元素里的menu.elements.calorie卡路里是根据每个食材的卡路里计算的,相对来说,menu.calorie的值更准确) * 功效搜菜 `getMenuClassification`传入分类(功效)参数,比如川菜.搜到所有的川菜名字.然后可以用菜名搜索搜某个菜的详细信息 + * **点赞或评论来影响推荐顺序** + + * **晒图区域** + * 营养量搜菜 : 搜索某个营养量范围内的菜 可选参数: `[calorie,carbohydrate,fat ,protein,cellulose,vitaminA,vitaminB1,vitaminB2,vitaminB6,vitaminC,vitaminE,carotene,cholesterol,Mg,Ca,Fe,Zn,Cu,Mn,K ,P ,Na,Se,niacin ,thiamine]` @@ -192,9 +256,9 @@ WebUtil.getInstance().getMenusByElements(params, new Callback() { @Override public void onFailure(Call call, IOException e) { - + } - + @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); @@ -277,3 +341,65 @@ * `occupation_name`,`physical_name`的值必须和数据库对应 ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvjbfh6vm1j30r70eh3zj.jpg) + + + +## 国赛阶段 + +### 代码 + +* 优化了`getRandomMenus方法`,传入username参数.会根据user的体质,职业,病理推荐菜 + + ```java + public void getRandomMenus(int count, String username, Callback callback) + ``` + + 这个方法之前的版本没有username参数,**现在弃用原来的版本,原来的方法仍然可以调用,需要把项目的所有getRandomMenus方法调用加上一个username参数** + +### 问题 + +* ~~连续识别,出现错误的,点一下消去 锐!~~ +* ~~bug: 连续拍照后 点了一周定制 锐~~ +* ~~*食材模糊识别 ok*~~ +* ~~通过食材组合,搜索菜 ,菜要符合username的信息 赵和锐 `getMenusByMaterials`~~ +* 卡路里不对 +* ~~*早餐晚餐的搜索不随机 shuffle了一下.ok*~~ + + * ~~`get_menus_by_elements` django随机一下~~ +* 周定制下面的两个按钮 锐 +* ~~*搜菜如果搜不到 把name减一下再搜 ok*~~ +* getRandomMenus的调用里面加上username参数 锐 +* 吃饭的时候没拍照,吃饭完了才想添加,但是菜图片没有了.需要输入添加 (王) +* 口味信息采集 +* 历史记录 +* 社交功能: 点赞,晒图,评论 + + + ### 时间安排 + +* 周日上午答辩 +* 周五排练 + +### PPT安排 + +* 小组分工介绍 + + +* 产品背景 秦 +* 量身定制 林 +* 周定制 林 +* 动态添加 智能定量 赵 +* 拍食材做菜(食菜帮) 赵 +* 菜谱推荐 秦 + +* 产品亮点 秦 +* 产品难点 王 +* 未来展望 王 + * 相信在不就得将来,在AI智能定制膳食的帮助下,人们不再为职业病,慢性病所烦恼,享受科学膳食带来的健康生活. + +### 需要演示的功能 + +* 拍照 菜品识别 识别 烤鸭 土豆丝 鱼香肉丝 红烧肉 炒面 (动态调量,修改当天余额) +* 拍照 食材识别 胡萝卜 白萝卜 姜 长条茄子 菜花 (根据用户的信息,并且是多搜索) + +* 周定制(最左边的fragment) \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f28d26..87e5b18 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,7 +60,8 @@ - + + \ No newline at end of file diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java index 31b7f5f..aed7574 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java @@ -4,10 +4,14 @@ import android.app.Activity; import android.app.Application; import android.os.Bundle; +import com.example.ninefourone.nutritionmaster.bean.Element; import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.Illness; import com.example.ninefourone.nutritionmaster.bean.MyUser; import com.example.ninefourone.nutritionmaster.bean.Occupation; +import com.example.ninefourone.nutritionmaster.bean.Physique; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.google.gson.Gson; @@ -39,7 +43,16 @@ public class NutritionMaster extends Application { public static NutritionMaster mInstance; private int appCount = 0; - public static MyUser user; + public static MyUser user = null; + public static Physique physique = null; + public static Occupation occupation = null; + public static Element element = null; + public static Illness illness = null; + + public static Element calculatedElement = null; + + public static int randomSeed = CalculateUtils.getWeek(); + @Override public void onCreate() { @@ -121,7 +134,7 @@ public class NutritionMaster extends Application { */ private void initUser() { user = new MyUser(); - user.setUsername("ScorpioMiku"); + user.setUsername("test1"); } /** @@ -176,9 +189,9 @@ public class NutritionMaster extends Application { // 获取所有响应头字段 Map> map = connection.getHeaderFields(); // 遍历所有的响应头字段 - for (String key : map.keySet()) { - System.err.println(key + "--->" + map.get(key)); - } +// for (String key : map.keySet()) { +// System.err.println(key + "--->" + map.get(key)); +// } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String result = ""; @@ -203,6 +216,7 @@ public class NutritionMaster extends Application { */ private void initYouDao() { YouDaoApplication.init(this, ConstantUtils.YOUDAO_APPKEY); + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java index 6a0610b..3622798 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java @@ -10,9 +10,11 @@ import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.bean.DailyCard; import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization.CustomizationActivity; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import com.orhanobut.logger.Logger; import java.util.ArrayList; @@ -45,15 +47,17 @@ public class CardHolder extends RecyclerView.ViewHolder { public void bindView(int picId, DailyCard dailyCard, final Context context) { tvName.setText(dailyCard.getTitle()); tvSign.setText(dailyCard.getDescription()); -// ivPhoto.setImageDrawable(context.getDrawable(picId)); Glide.with(context).load(picId).into(ivPhoto); i = new Intent(context, CustomizationActivity.class); i.putExtra("SEND_CODE", dailyCard.getTitle()); -// Logger.d(text); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - context.startActivity(i); + if (NutritionMaster.physique == null || NutritionMaster.occupation == null) { + MessageUtils.MakeToast("填写信息才能使用哦~"); + } else { + context.startActivity(i); + } } }); } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationAdapter.java index 8a36fdc..9950f7a 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationAdapter.java @@ -1,25 +1,45 @@ package com.example.ninefourone.nutritionmaster.adapter; +import android.content.Context; import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization.CustomizationActivity; + +import java.util.ArrayList; + /** * Created by ScorpioMiku on 2018/9/24. */ -public class CustomizationAdapter extends RecyclerView.Adapter { - @Override - public CardHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return null; +public class CustomizationAdapter extends RecyclerView.Adapter { + private ArrayList mList; + private Context context; + private int flag; + + public CustomizationAdapter(ArrayList mList, Context context, int flag) { + this.mList = mList; + this.context = context; + this.flag = flag; } @Override - public void onBindViewHolder(CardHolder holder, int position) { + public CustomizationHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.customization_item, parent, false); + return new CustomizationHolder(view); + } + @Override + public void onBindViewHolder(CustomizationHolder holder, int position) { + holder.bindView(mList.get(position)); } @Override public int getItemCount() { - return 0; + return mList.size(); } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationHolder.java index 8dd7e10..4a3d634 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationHolder.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CustomizationHolder.java @@ -1,14 +1,93 @@ package com.example.ninefourone.nutritionmaster.adapter; +import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.NutritionMaster; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.Element; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.RecommendFood; +import com.example.ninefourone.nutritionmaster.modules.RecipeActivity.RecipeActivity; + +import java.util.Random; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; /** * Created by ScorpioMiku on 2018/9/24. */ public class CustomizationHolder extends RecyclerView.ViewHolder { + @BindView(R.id.customization_item_image) + ImageView customizationItemImage; + @BindView(R.id.food_name) + TextView foodName; + @BindView(R.id.food_quantity) + TextView foodQuantity; + @BindView(R.id.arch) + ImageView arch; + @BindView(R.id.food_energy) + TextView foodEnergy; + @BindView(R.id.click) + RelativeLayout click; + public CustomizationHolder(View itemView) { super(itemView); + ButterKnife.bind(this, itemView); } + + public void bindView(final FoodMenu foodMenu) { + Glide.with(itemView.getContext()).load(foodMenu.getImage_url()).into(customizationItemImage); + foodName.setText(foodMenu.getName()); + try { + Element element = NutritionMaster.element.calculateData(NutritionMaster.user); + double calorieQuantity = element.getCalorie() - NutritionMaster.user.getEaten_elements().getCalorie(); + double quantity = calorieQuantity / foodMenu.getCalorie(); + Random random = new Random((int) foodMenu.getElements().getCalorie()); + if (quantity > 200) { + quantity = 150 + random.nextInt(50); + } else if (quantity < 50) { + quantity = 50 + random.nextInt(50); + } +// Logger.d(foodMenu.getCalorie()); + int energy = (int) (foodMenu.getElements().getCalorie() * quantity / 100); + energy = checkEnergy(energy); + foodEnergy.setText(energy + "千卡"); + foodQuantity.setText((int) quantity + "克"); + + final Intent intent = new Intent(itemView.getContext().getApplicationContext(), RecipeActivity.class); + RecommendFood recommendFood = new RecommendFood(foodMenu, 1); + intent.putExtra("SEND_OBJECT", recommendFood); + click.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemView.getContext().getApplicationContext().startActivity(intent); + } + }); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + + + } + + private int checkEnergy(int energy) { + if (energy < 30) { + return checkEnergy(energy * 2); + } else if (energy > 250) { + return checkEnergy(energy - 50); + } else { + return energy; + } + } + + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryAdapter.java new file mode 100644 index 0000000..bc8c927 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryAdapter.java @@ -0,0 +1,43 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.History; + +import java.util.List; + +/** + * Created by ScorpioMiku on 2018/11/7. + */ + +public class HistoryAdapter extends RecyclerView.Adapter { + private Context context; + private List mList; + + public HistoryAdapter(Context context, List mList) { + this.context = context; + this.mList = mList; + } + + @Override + public HistoryHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.dish_item, parent, false); + HistoryHolder historyHolder = new HistoryHolder(view); + return historyHolder; + } + + @Override + public void onBindViewHolder(HistoryHolder holder, int position) { + holder.bindView(mList.get(position)); + } + + @Override + public int getItemCount() { + return mList.size(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryHolder.java new file mode 100644 index 0000000..d8d26b7 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HistoryHolder.java @@ -0,0 +1,71 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.History; +import com.example.ninefourone.nutritionmaster.bean.RecommendFood; +import com.example.ninefourone.nutritionmaster.modules.RecipeActivity.RecipeActivity; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; + +import java.io.IOException; + +import butterknife.BindView; +import butterknife.ButterKnife; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; + +/** + * Created by ScorpioMiku on 2018/11/7. + */ + +public class HistoryHolder extends RecyclerView.ViewHolder { + @BindView(R.id.image) + ImageView image; + @BindView(R.id.name) + TextView name; + @BindView(R.id.describle) + TextView describle; + private FoodMenu foodMenu; + + public HistoryHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void bindView(History history) { + Glide.with(itemView.getContext()).load(history.getMenu().getImage_url()).into(image); + name.setText(history.getMenu().getName()); + WebUtil webUtil = WebUtil.getInstance(); + webUtil.getMenu(history.getMenu().getName(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + foodMenu = new Gson().fromJson(json, FoodMenu.class); + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(itemView.getContext().getApplicationContext(), RecipeActivity.class); + RecommendFood recommendFood = new RecommendFood(foodMenu, 1); + intent.putExtra("SEND_OBJECT", recommendFood); + itemView.getContext().getApplicationContext().startActivity(intent); + } + }); + } + }); + + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java index 9667200..52da2b6 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java @@ -54,4 +54,8 @@ public class HomePagerAdapter extends FragmentPagerAdapter { public CharSequence getPageTitle(int position) { return TITLES[position]; } + + public void rereshUI() { + ((BodyInformationFragment) fragments[1]).refreshUI(); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialAdapter.java index b83e46e..655812c 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialAdapter.java @@ -7,19 +7,21 @@ import android.view.View; import android.view.ViewGroup; import com.example.ninefourone.nutritionmaster.R; -import com.example.ninefourone.nutritionmaster.bean.Material; +import com.example.ninefourone.nutritionmaster.bean.FoodMaterial; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import java.util.ArrayList; +import java.util.List; /** * Created by ScorpioMiku on 2018/9/9. */ public class MaterialAdapter extends RecyclerView.Adapter { - private ArrayList mList; + private List mList; private Context mContext; - public MaterialAdapter(ArrayList mList, Context mContext) { + public MaterialAdapter(List mList, Context mContext) { this.mList = mList; this.mContext = mContext; } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialHolder.java index 1daabff..21e9bad 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialHolder.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialHolder.java @@ -5,7 +5,8 @@ import android.view.View; import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; -import com.example.ninefourone.nutritionmaster.bean.Material; +import com.example.ninefourone.nutritionmaster.bean.FoodMaterial; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import butterknife.BindView; import butterknife.ButterKnife; @@ -24,11 +25,12 @@ public class MaterialHolder extends RecyclerView.ViewHolder { public MaterialHolder(View itemView) { super(itemView); - ButterKnife.bind(this,itemView); + ButterKnife.bind(this, itemView); } - public void bindView(Material material) { - weightNumber.setText(material.getWeight() + ""); - name.setText(material.getMaterialName()); + public void bindView(FoodMenu.CookQuantityBean cookQuantityBean) { + name.setText(cookQuantityBean.getMaterial()); + String weight = cookQuantityBean.getQuantity(); + weightNumber.setText(weight); } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultAdapter.java new file mode 100644 index 0000000..b695202 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultAdapter.java @@ -0,0 +1,42 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; + +import java.util.ArrayList; + +/** + * Created by ScorpioMiku on 2018/10/7. + */ + +public class MaterialResultAdapter extends RecyclerView.Adapter { + private ArrayList foodMenus; + private Context context; + + public MaterialResultAdapter(ArrayList foodMenus, Context context) { + this.foodMenus = foodMenus; + this.context = context; + } + + @Override + public MaterialResultHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.material_result_item, parent, false); + return new MaterialResultHolder(view); + } + + @Override + public void onBindViewHolder(MaterialResultHolder holder, int position) { + holder.bindView(foodMenus.get(position)); + } + + @Override + public int getItemCount() { + return foodMenus.size(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultHolder.java new file mode 100644 index 0000000..eb49c40 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/MaterialResultHolder.java @@ -0,0 +1,49 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.RecommendFood; +import com.example.ninefourone.nutritionmaster.modules.RecipeActivity.RecipeActivity; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by ScorpioMiku on 2018/10/7. + */ + +public class MaterialResultHolder extends RecyclerView.ViewHolder { + @BindView(R.id.image) + ImageView image; + @BindView(R.id.name) + TextView name; + @BindView(R.id.whole_layout) + LinearLayout wholeLayout; + + public MaterialResultHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void bindView(final FoodMenu foodMenu) { + Glide.with(itemView.getContext()).load(foodMenu.getImage_url()).into(image); + name.setText(foodMenu.getName()); + wholeLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(itemView.getContext().getApplicationContext(), RecipeActivity.class); + RecommendFood recommendFood = new RecommendFood(foodMenu, 1); + intent.putExtra("SEND_OBJECT", recommendFood); + itemView.getContext().getApplicationContext().startActivity(intent); + } + }); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/RecommendAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/RecommendAdapter.java index 9df29ac..fe018ff 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/RecommendAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/RecommendAdapter.java @@ -1,9 +1,12 @@ package com.example.ninefourone.nutritionmaster.adapter; +import android.app.AlertDialog; import android.content.Intent; import android.view.View; import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseMultiItemQuickAdapter; @@ -11,6 +14,7 @@ import com.chad.library.adapter.base.BaseViewHolder; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.bean.RecommendFood; import com.example.ninefourone.nutritionmaster.modules.RecipeActivity.RecipeActivity; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import com.orhanobut.logger.Logger; import java.util.List; @@ -20,7 +24,6 @@ import java.util.List; */ public class RecommendAdapter extends BaseMultiItemQuickAdapter { - private int[] indexs = new int[]{0, 1, 1, 2}; private Intent intent; /** @@ -31,37 +34,43 @@ public class RecommendAdapter extends BaseMultiItemQuickAdapter data) { super(data); - addItemType(RecommendFood.TYPE_BIG, R.layout.recommend_item_big); + addItemType(RecommendFood.TYPE_BIG, R.layout.recommend_item_middle); addItemType(RecommendFood.TYPE_DETAIL, R.layout.recommend_item_detail); addItemType(RecommendFood.TYPE_MIDDLE, R.layout.recommend_item_middle); } @Override - protected void convert(BaseViewHolder helper, RecommendFood item) { + protected void convert(BaseViewHolder helper, final RecommendFood item) { ImageView imageView = helper.getView(R.id.recommend_item_imageview); - Glide.with(mContext).load(R.drawable.food_test).into(imageView); - switch (item.getItemType()) { - case RecommendFood.TYPE_BIG: - helper.setText(R.id.recommend_item_title, "红烧肉"); - break; - case RecommendFood.TYPE_DETAIL: - helper.setText(R.id.recommend_item_title, item.getTitle()); - helper.setText(R.id.recommend_item_description, item.getDescription()); - break; - case RecommendFood.TYPE_MIDDLE: - helper.setText(R.id.recommend_item_title, "红烧"); - break; - } + + Glide.with(mContext).load(item.getPicture()).into(imageView); View view = helper.getView(R.id.whole_layout); - intent = new Intent(mContext, RecipeActivity.class); -// Logger.d(item.getItemType()); - intent.putExtra("SEND_OBJECT", item); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + Intent intent = new Intent(mContext, RecipeActivity.class); + intent.putExtra("SEND_OBJECT", item); mContext.startActivity(intent); } }); + helper.setText(R.id.recommend_item_title, item.getTitle()); + if (item.getItemType() == RecommendFood.TYPE_DETAIL) { + helper.setText(R.id.recommend_item_description, item.getDescription()); + LinearLayout detailClick = helper.getView(R.id.detail_click); + detailClick.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext).setTitle("小知识") + .setMessage(item.getDescription()).setIcon(R.drawable.ic_add_recipe); + AlertDialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(true); + dialog.setCancelable(true); + dialog.show(); + } + }); + } + + } @Override diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java index 6555420..f0ecbb1 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java @@ -68,6 +68,6 @@ public class ResultListHolder extends RecyclerView.ViewHolder { name.setText(classifyResult.getName()); - Glide.with(context).load("http://s2.boohee.cn/house/food_big/big_photo20155149534910631.jpg").into(image); + Glide.with(context).load(classifyResult.getImgPath()).into(image); } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java index 758b122..0e15d37 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java @@ -5,6 +5,7 @@ import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.example.ninefourone.nutritionmaster.NutritionMaster; +import com.example.ninefourone.nutritionmaster.bean.Element; import com.example.ninefourone.nutritionmaster.bean.MyUser; import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.orhanobut.logger.Logger; @@ -27,9 +28,11 @@ public abstract class BaseActivity extends AppCompatActivity { this.user = NutritionMaster.user; setContentView(getLayoutId()); unbinder = ButterKnife.bind(this); - initViews(savedInstanceState); webUtil = WebUtil.getInstance(); + + initViews(savedInstanceState); initToolBar(); + } public WebUtil getWebUtil() { @@ -99,7 +102,8 @@ public abstract class BaseActivity extends AppCompatActivity { protected void upUser() { NutritionMaster.user = user; - Logger.d("用户信息已改" + NutritionMaster.user.toString()); + NutritionMaster.element = new Element(user); +// Logger.d("用户信息已改" + NutritionMaster.user.toString()); } @Override diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java index 66ecba3..9e3ec82 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java @@ -37,6 +37,7 @@ public abstract class BaseFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { + webUtil = WebUtil.getInstance(); parentView = inflater.inflate(getLayoutResId(), container, false); activity = getSupportActivity(); return parentView; @@ -47,7 +48,6 @@ public abstract class BaseFragment extends Fragment { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); initView(savedInstanceState); - webUtil = WebUtil.getInstance(); this.user = NutritionMaster.user; } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java index 2ac1910..76d550b 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java @@ -24,7 +24,7 @@ public class ClassifyResult implements Serializable { private Boolean has_calorie = false; private double quantity = -1; private FoodMenu foodMenu; - private FoodMaterial foodMaterial; + private Material foodMaterial; private int flag = -1; public static int MATERIAL = 0; @@ -64,13 +64,12 @@ public class ClassifyResult implements Serializable { public void onFailure(Call call, IOException e) { } - @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); FoodMaterial material = new Gson().fromJson(json, FoodMaterial.class); - foodMaterial = material; - Logger.d(name + "|" + foodMaterial); + foodMaterial = new Material(); + foodMaterial.setFoodMaterial(material); } }); } else { @@ -78,7 +77,7 @@ public class ClassifyResult implements Serializable { } } - public FoodMaterial getFoodMaterial() { + public Material getFoodMaterial() { return foodMaterial; } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Element.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Element.java new file mode 100644 index 0000000..620cc6a --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Element.java @@ -0,0 +1,427 @@ +package com.example.ninefourone.nutritionmaster.bean; + +import com.example.ninefourone.nutritionmaster.NutritionMaster; + +/** + * Created by ScorpioMiku on 2018/10/7. + */ + +public class Element implements Cloneable { + + private double calorie; + private float carbohydrate; + private float fat; + private float protein; + private float cellulose; + private float vitaminA; + private float vitaminB1; + private float vitaminB2; + private float vitaminB6; + private float vitaminC; + private float vitaminE; + private float carotene; + private float cholesterol; + private float Mg; + private float Ca; + private float Fe; + private float Zn; + private float Cu; + private float Mn; + private float K; + private float P; + private float Na; + private float Se; + private float niacin; + private float thiamine; + + + public Element calculateData(MyUser user) throws CloneNotSupportedException { + double calorie = 655 + 9.6 * user.getWeight() + 1.9 * user.getHeight() - 4.7 * user.getAge(); + Element temp = (Element) this.clone(); + temp.setCalorie(calorie * this.calorie); + temp.setCarbohydrate(user.getWeight() * this.carbohydrate); + temp.setFat(user.getWeight() * this.fat); + temp.setProtein(user.getWeight() * this.protein); + return temp; + } + + public Element(MyUser user) { + if (user.getSex() == 0) { + calorie = 0f; + carbohydrate = 7.5f; + fat = 1.2f; + protein = 1f; + cellulose = 25f; + vitaminA = 700f; + vitaminB1 = 1200f; + vitaminB2 = 1200f; + vitaminB6 = 1400f; + vitaminC = 100f; + vitaminE = 14f; + carotene = 3600f; + cholesterol = 200f; + Mg = 315f; + Ca = 1200f; + Fe = 15f; + Zn = 12f; + Cu = 2.3f; + Mn = 3.5f; + K = 2000f; + P = 1000f; + Na = 1500f; + Se = 0.05f; + niacin = 0f; + thiamine = 0f; + } else { + calorie = 0f; + carbohydrate = 7.5f; + fat = 1.2f; + protein = 1f; + cellulose = 25f; + vitaminA = 800f; + vitaminB1 = 1400f; + vitaminB2 = 1400f; + vitaminB6 = 2000f; + vitaminC = 100f; + vitaminE = 14f; + carotene = 3400f; + cholesterol = 200f; + Mg = 360f; + Ca = 1200f; + Fe = 10f; + Zn = 15f; + Cu = 2.3f; + Mn = 3.5f; + K = 2000f; + P = 1000f; + Na = 1500f; + Se = 0.05f; + niacin = 0f; + thiamine = 0f; + } + } + + public Element(Physique.ElementsBean elementsBean) { + calorie = elementsBean.getCalorie(); + carbohydrate = elementsBean.getCarbohydrate(); + fat = elementsBean.getFat(); + protein = elementsBean.getProtein(); + cellulose = elementsBean.getCellulose(); + vitaminA = elementsBean.getVitaminA(); + vitaminB1 = elementsBean.getVitaminB1(); + vitaminB2 = elementsBean.getVitaminB2(); + vitaminB6 = elementsBean.getVitaminB6(); + vitaminC = elementsBean.getVitaminC(); + vitaminE = elementsBean.getVitaminE(); + carotene = elementsBean.getCarotene(); + cholesterol = elementsBean.getCholesterol(); + Mg = elementsBean.getMg(); + Ca = elementsBean.getCa(); + Fe = elementsBean.getFe(); + Zn = elementsBean.getZn(); + Cu = elementsBean.getCu(); + Mn = elementsBean.getMn(); + K = elementsBean.getK(); + P = elementsBean.getP(); + Na = elementsBean.getNa(); + Se = elementsBean.getSe(); + niacin = elementsBean.getNiacin(); + thiamine = elementsBean.getThiamine(); + } + + public Element(FoodMenu.ElementsBean elementsBean) { + calorie = elementsBean.getCalorie(); + carbohydrate = (float) elementsBean.getCarbohydrate(); + fat = (float) elementsBean.getFat(); + protein = (float) elementsBean.getProtein(); + cellulose = (float) elementsBean.getCellulose(); + vitaminA = (float) elementsBean.getVitaminA(); + vitaminB1 = elementsBean.getVitaminB1(); + vitaminB2 = (float) elementsBean.getVitaminB2(); + vitaminB6 = elementsBean.getVitaminB6(); + vitaminC = (float) elementsBean.getVitaminC(); + vitaminE = (float) elementsBean.getVitaminE(); + carotene = (float) elementsBean.getCarotene(); + cholesterol = (float) elementsBean.getCholesterol(); + Mg = (float) elementsBean.getMg(); + Ca = (float) elementsBean.getCa(); + Fe = (float) elementsBean.getFe(); + Zn = (float) elementsBean.getZn(); + Cu = (float) elementsBean.getCu(); + Mn = (float) elementsBean.getMn(); + K = (float) elementsBean.getK(); + P = (float) elementsBean.getP(); + Na = (float) elementsBean.getNa(); + Se = (float) elementsBean.getSe(); + niacin = (float) elementsBean.getNiacin(); + thiamine = (float) elementsBean.getThiamine(); + } + + public Element(Element elementsBean) { + calorie = elementsBean.getCalorie(); + carbohydrate = elementsBean.getCarbohydrate(); + fat = elementsBean.getFat(); + protein = elementsBean.getProtein(); + cellulose = elementsBean.getCellulose(); + vitaminA = elementsBean.getVitaminA(); + vitaminB1 = elementsBean.getVitaminB1(); + vitaminB2 = elementsBean.getVitaminB2(); + vitaminB6 = elementsBean.getVitaminB6(); + vitaminC = elementsBean.getVitaminC(); + vitaminE = elementsBean.getVitaminE(); + carotene = elementsBean.getCarotene(); + cholesterol = elementsBean.getCholesterol(); + Mg = elementsBean.getMg(); + Ca = elementsBean.getCa(); + Fe = elementsBean.getFe(); + Zn = elementsBean.getZn(); + Cu = elementsBean.getCu(); + Mn = elementsBean.getMn(); + K = elementsBean.getK(); + P = elementsBean.getP(); + Na = elementsBean.getNa(); + Se = elementsBean.getSe(); + niacin = elementsBean.getNiacin(); + thiamine = elementsBean.getThiamine(); + } + + public Element(Occupation.ElementsBean elementsBean) { + calorie = elementsBean.getCalorie(); + carbohydrate = elementsBean.getCarbohydrate(); + fat = elementsBean.getFat(); + protein = elementsBean.getProtein(); + cellulose = elementsBean.getCellulose(); + vitaminA = elementsBean.getVitaminA(); + vitaminB1 = elementsBean.getVitaminB1(); + vitaminB2 = elementsBean.getVitaminB2(); + vitaminB6 = elementsBean.getVitaminB6(); + vitaminC = elementsBean.getVitaminC(); + vitaminE = elementsBean.getVitaminE(); + carotene = elementsBean.getCarotene(); + cholesterol = elementsBean.getCholesterol(); + Mg = elementsBean.getMg(); + Ca = elementsBean.getCa(); + Fe = elementsBean.getFe(); + Zn = elementsBean.getZn(); + Cu = elementsBean.getCu(); + Mn = elementsBean.getMn(); + K = elementsBean.getK(); + P = elementsBean.getP(); + Na = elementsBean.getNa(); + Se = elementsBean.getSe(); + niacin = elementsBean.getNiacin(); + thiamine = elementsBean.getThiamine(); + } + + + public Element(Illness.ElementsBean elementsBean) { + calorie = elementsBean.getCalorie(); + carbohydrate = elementsBean.getCarbohydrate(); + fat = elementsBean.getFat(); + protein = elementsBean.getProtein(); + cellulose = elementsBean.getCellulose(); + vitaminA = elementsBean.getVitaminA(); + vitaminB1 = elementsBean.getVitaminB1(); + vitaminB2 = elementsBean.getVitaminB2(); + vitaminB6 = elementsBean.getVitaminB6(); + vitaminC = elementsBean.getVitaminC(); + vitaminE = elementsBean.getVitaminE(); + carotene = elementsBean.getCarotene(); + cholesterol = elementsBean.getCholesterol(); + Mg = elementsBean.getMg(); + Ca = elementsBean.getCa(); + Fe = elementsBean.getFe(); + Zn = elementsBean.getZn(); + Cu = elementsBean.getCu(); + Mn = elementsBean.getMn(); + K = elementsBean.getK(); + P = elementsBean.getP(); + Na = elementsBean.getNa(); + Se = elementsBean.getSe(); + niacin = elementsBean.getNiacin(); + thiamine = elementsBean.getThiamine(); + } + + + @Override + public String toString() { + return "ElementsBean{" + + ", 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 void add(Element elementsBean, float factor) { + float divisor; + if (factor == -1) { + divisor = 1; + factor = 1; + } else { + divisor = factor + 1.0f; + } + this.calorie = (factor * elementsBean.getCalorie() + this.calorie) / divisor; + this.carbohydrate = (factor * elementsBean.getCarbohydrate() + this.carbohydrate) / divisor; + this.fat = (factor * elementsBean.getFat() + this.fat) / divisor; + this.protein = (factor * elementsBean.getProtein() + this.protein) / divisor; + this.cellulose = (factor * elementsBean.getCellulose() + this.cellulose) / divisor; + this.vitaminA = (factor * elementsBean.getVitaminA() + this.vitaminA) / divisor; + this.vitaminB1 = (factor * elementsBean.getVitaminB1() + this.vitaminB1) / divisor; + this.vitaminB2 = (factor * elementsBean.getVitaminB2() + this.vitaminB2) / divisor; + this.vitaminB6 = (factor * elementsBean.getVitaminB6() + this.vitaminB6) / divisor; + this.vitaminC = (factor * elementsBean.getVitaminC() + this.vitaminC) / divisor; + this.vitaminE = (factor * elementsBean.getVitaminE() + this.vitaminE) / divisor; + this.carotene = (factor * elementsBean.getCarotene() + this.carotene) / divisor; + this.cholesterol = (factor * elementsBean.getMg() + this.Mg) / divisor; + this.Mg = (factor * elementsBean.getCarbohydrate() + this.carbohydrate) / divisor; + this.Ca = (factor * elementsBean.getCa() + this.Ca) / divisor; + this.Fe = (factor * elementsBean.getFe() + this.Fe) / divisor; + this.Zn = (factor * elementsBean.getZn() + this.Zn) / divisor; + this.Cu = (factor * elementsBean.getCu() + this.Cu) / divisor; + this.Mn = (factor * elementsBean.getMn() + this.Mn) / divisor; + this.K = (factor * elementsBean.getK() + this.K) / divisor; + this.P = (factor * elementsBean.getP() + this.P) / divisor; + this.Na = (factor * elementsBean.getNa() + this.Na) / divisor; + this.Se = (factor * elementsBean.getSe() + this.Se) / divisor; + this.niacin = (factor * elementsBean.getNiacin() + this.niacin) / divisor; + this.thiamine = (factor * elementsBean.getThiamine() + this.thiamine) / divisor; + } + + public double getCalorie() { + return calorie; + } + + public float getCarbohydrate() { + return carbohydrate; + } + + public float getFat() { + return fat; + } + + public float getProtein() { + return protein; + } + + public float getCellulose() { + return cellulose; + } + + public float getVitaminA() { + return vitaminA; + } + + public float getVitaminB1() { + return vitaminB1; + } + + public float getVitaminB2() { + return vitaminB2; + } + + public float getVitaminB6() { + return vitaminB6; + } + + public float getVitaminC() { + return vitaminC; + } + + public float getVitaminE() { + return vitaminE; + } + + public float getCarotene() { + return carotene; + } + + public float getCholesterol() { + return cholesterol; + } + + public float getMg() { + return Mg; + } + + public float getCa() { + return Ca; + } + + public float getFe() { + return Fe; + } + + public float getZn() { + return Zn; + } + + public float getCu() { + return Cu; + } + + public float getMn() { + return Mn; + } + + public float getK() { + return K; + } + + public float getP() { + return P; + } + + public float getNa() { + return Na; + } + + public float getSe() { + return Se; + } + + public float getNiacin() { + return niacin; + } + + public float getThiamine() { + return thiamine; + } + + public void setCalorie(double calorie) { + this.calorie = calorie; + } + + public void setCarbohydrate(float carbohydrate) { + this.carbohydrate = carbohydrate; + } + + public void setFat(float fat) { + this.fat = fat; + } + + public void setProtein(float protein) { + this.protein = protein; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenu.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenu.java index bb76a89..e15c5e9 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenu.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenu.java @@ -5,6 +5,7 @@ import java.util.List; public class FoodMenu implements Serializable { + /** * flavor : 五香味 * calorie : 157 @@ -20,6 +21,7 @@ public class FoodMenu implements Serializable { private String flavor; private float calorie; private String name; + private int is_breakfast; private String technology; private String image_url; private String practice; @@ -33,6 +35,7 @@ public class FoodMenu implements Serializable { "flavor='" + flavor + '\'' + ", calorie=" + calorie + ", name='" + name + '\'' + + ", is_breakfast=" + is_breakfast + ", technology='" + technology + '\'' + ", image_url='" + image_url + '\'' + ", practice='" + practice + '\'' + @@ -42,6 +45,14 @@ public class FoodMenu implements Serializable { '}'; } + public int getIs_breakfast() { + return is_breakfast; + } + + public void setIs_breakfast(int is_breakfast) { + this.is_breakfast = is_breakfast; + } + public String getFlavor() { return flavor; } @@ -114,7 +125,7 @@ public class FoodMenu implements Serializable { this.menuclassification_set = menuclassification_set; } - public static class ElementsBean implements Serializable{ + public static class ElementsBean implements Serializable { /** * id : 3940 * calorie : 183 @@ -459,4 +470,3 @@ public class FoodMenu implements Serializable { } - diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenuLight.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenuLight.java index a6b8a29..9c1af14 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenuLight.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/FoodMenuLight.java @@ -1,6 +1,8 @@ package com.example.ninefourone.nutritionmaster.bean; -public class FoodMenuLight { +import java.io.Serializable; + +public class FoodMenuLight implements Serializable{ /** * name : 番茄虾仁 diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/History.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/History.java new file mode 100644 index 0000000..cf3cfd4 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/History.java @@ -0,0 +1,113 @@ +package com.example.ninefourone.nutritionmaster.bean; + +public class History { + /** + * id : 13 + * menu : {"name":"多味茄子泥","calorie":105,"elements":6383,"image_url":"http://s1.ig.meishij.net/p/20121204/3fde157430b268b189a913983fdda3e6_150x150.jpg"} + * time : 2018-11-02T15:34:27.050541+08:00 + * user : 11 + */ + + private int id; + private MenuBean menu; + private String time; + private int user; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public MenuBean getMenu() { + return menu; + } + + public void setMenu(MenuBean menu) { + this.menu = menu; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public int getUser() { + return user; + } + + public void setUser(int user) { + this.user = user; + } + + public static class MenuBean { + /** + * name : 多味茄子泥 + * calorie : 105 + * elements : 6383 + * image_url : http://s1.ig.meishij.net/p/20121204/3fde157430b268b189a913983fdda3e6_150x150.jpg + */ + + private String name; + private int calorie; + private int elements; + private String image_url; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCalorie() { + return calorie; + } + + public void setCalorie(int calorie) { + this.calorie = calorie; + } + + public int getElements() { + return elements; + } + + public void setElements(int elements) { + this.elements = elements; + } + + public String getImage_url() { + return image_url; + } + + public void setImage_url(String image_url) { + this.image_url = image_url; + } + + @Override + public String toString() { + return "MenuBean{" + + "name='" + name + '\'' + + ", calorie=" + calorie + + ", elements=" + elements + + ", image_url='" + image_url + '\'' + + '}'; + } + } + + @Override + public String toString() { + return "History{" + + "id=" + id + + ", menu=" + menu + + ", time='" + time + '\'' + + ", user=" + user + + '}' + '\n'; + } +} 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 fa90a81..c2c7137 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 @@ -1,8 +1,9 @@ package com.example.ninefourone.nutritionmaster.bean; +import java.io.Serializable; import java.util.List; -public class Illness { +public class Illness implements Serializable{ /** * menu_classification : {"classification":"青少年食谱","cure_occupation":["学生"],"menu_effect":["【家常菜】蟹黄豆腐","三鲜鳝汤","上海糖醋小排骨","上海香酥鸡","丝瓜炒小鲜","丝瓜炒面筋","两炸豆腐","丰胸塑身的燕麦豆浆枣粥","乳酪泡芙","五柳豆腐","五谷低卡版发糕","五香干豆腐","五香牛肉干","五香茶叶鹌鹑蛋","五香黄豆","京味炸酱面","京爆里脊","什锦泡粥","什锦莓果派","什锦豆腐煲","健康养生起司蛋糕","健脑菜腊肉蚕豆笋丁","儿童健脑菜-松仁彩丁","全麦馒头","八宝莲子羹","农家丰收饭","冬笋干烧肉","冬虫夏草乌鸡粥","冰糖核桃仁糊","冰醉鸡","凉拌蔬菜","凉拌豆腐皮","剁椒粉丝开屏鱼","千张包","南煎豆腐","南瓜排骨汤","南瓜水饺","南瓜沙拉","南瓜蒸饺","南瓜虾皮汤","南瓜起司蛋糕","南瓜银耳露","南瓜饺","南瓜馅水饺","南百红豆","卤水鸭心","卤猪仔脚","卤虎皮豆腐","原味乳酪派","原味蛋糕体","双味荷花豆腐","双味蝤蛑","双色对虾","双色芙蓉","发菜鱼片芫荽汤","口蘑鸭片汤","可乐鸡翅(2)","可乐鸡腿","台湾猪肚四神汤","合桃腰花","咖啡千层派","咖啡巧克力慕斯派","咖啡蛋糕卷","咖喱牛肉什锦饭","咖喱豆腐","咖喱鸡饭","咸蛋豆腐饼","咸蛋黄包","咸鸭蛋炒南瓜","哈尔滨糖醋排骨","啤酒老鸭粉丝煲","四喜素丸子","四季豆焖肉排","四川凉面","四方蒸饺","土豆烧牛腩","夏季养生的鲜泥鳅面嘎嘎","大蒜家常豆腐鱼","大蒜拌豆腐","夹沙豆腐","奶汤鳗片","奶香南瓜羹","奶香玉米棒","如意豆腐","姜椒鱼汤","媲美川菜馆的手撕包菜","孜然香酥小黄豆","安神补脑的小米豆腐虾仁丸","宫保豆腐丁","宫爆豆腐丁","家乡豆腐","家制酱排骨","家常田鸡","小炒牛肉","小白菜汤","小辣椒拌豆腐","尖椒拌豆腐","尖椒炒鲫鱼","尖椒茄子煲","山椒泡凤爪","山楂糕","山药黑鱼汤","川椒生炒鸭","巧克力冰淇淋","巧克力慕斯蛋糕卷","干炸仔鸡","干炸里脊","干烧桂鱼","干焖豆腐","干煎牛排","干煸鸡丝","干锅茶树菇","彩虹金菇煲","微波炉自制薯片","怪味五丁","怪味泥鳅","惹味三杯猴头菇","扒双菜","扒肉条","拌金针菇","拔丝地瓜","拔丝茄子","拔丝蚕豆","斑柳扒豆苗","无花果生鱼汤","既下饭又下酒的剁椒蒸带鱼","日式蒸烤乳酪蛋糕","晃子汤","木犀肉","木耳炒肉","木须豇豆","杂粮南瓜糊","杂粮蜜豆窝窝头","杏仁蛋糕卷","杞子烧黄鱼","果仁菠菜","果泥冰棒","果酱铁棍山药泥","果香浓郁金钻凤梨酥","枣泥豆腐","柠檬派","栗子草鸡煲","核桃片","核桃羹","核桃肉","核桃银耳紫薯粥","核桃黑豆浆","桂圆黄芪牛肉汤","桂花梭子蟹","桂花蜜果篮","桃仁土司","梨子百合菊花饮","椒丝腐乳通菜","椒油拌豆腐","椒盐南瓜条","椒盐毛豆","橙汁小排","正宗台湾麻油鸡","毛豆烧鸡","水晶豆腐","水果拼盘","水豆腐花汤","油条拌豆腐","油淋茄子","油炸肉心蛋","油焖对虾","油爆对虾","油盐豆腐","油豆腐塞肉","法式洋梨杏仁派","洋葱炒牛肉","洋葱炒肉丝","洋葱炖牛筋","海带炖冻豆腐","海带炖鸡","海带绿豆汤","海椰皇雪耳汤","清汤田鸡豆","清炖鲢鱼头","清热消暑的苦瓜烧肉","清蒸排骨","清蒸鸡蛋羹","湘汁四味明虾","溜丸子","滑溜羊肝","滑溜里脊","潮州大鱼丸","潮汕菜干猪骨汤","炒木须肉","炒牛肉丝拉皮","炒牛肝","炒米线","炒脆藕","炒花生","炒芹菜豆腐干","炒菠萝饭","炒豆腐皮","炒豆腐衣","炒青虾","炒面","炒香干菠菜","炒鸡杂","炖五花肉","炖冻豆腐","炖鸡翅","炝对虾片","炝拌牛肉丝","炝苋菜","炝黄豆芽","炫色鸡蛋汤","炸对虾","炸带鱼","炸扦子","炸熘肝尖","炸藕丝","炸青虾","炸鸡翅","烤牛肉饼","烤秋刀鱼","烧蒸牛肉","烧鸡腿","热狗番茄酱蛋糕卷","焖南瓜饭","焦炸茄子","煎南瓜粑粑","煎猪肝","煎芹菜叶饼","煎酿茄子","煎馒头片","煮小鸡","熊猫豆糯米粥","熏鸡拌黄瓜","熘三样","熘鱼片","爆炒猪腰","爆炒肝尖","爆炒鸡胗肝","爆茄子","牛奶扒白菜心","牛奶炒虾仁","牛筋炖土豆","牛肉丸子","牛肉冷片","牛肉炖豆腐","牛肉馅饼","牛蒡紫米养生粥","猪肝鸡蛋汤","玉米羹","珍珠豆腐汤","珠玉白菜","琥珀花生","甜辣牛肉干","甜酥花生","番茄炒蛋","番茄苹果汁","番茄茄丝","番茄虾仁","番茄鸡翅","番薯糖水","瘦身素菜西兰花炒冬瓜","白木耳炒豆腐","白果炒百合","白果羹","白油猪肝","白灼芥兰","白玉豆腐","白菜炖冻豆腐","白菜豆腐拌牛肉","白萝卜炒猪肝","百花蒸豆腐","皮蛋排骨粥","盖浇饭","砂锅豆腐海米","砂锅鱼头粉皮","砂锅鸡","福建酿豆腐","稍甜带点酸的玫瑰糖鲜桃果酱","空心菜排骨汤","米粉蒸南瓜","粉丝蛋","粉蒸素鸡","粟米豆腐羹","糖拌花生米","糖豆","糖醋花生米","糖醋菠萝排骨","糖醋西葫芦丁","糖醋鲈鱼","糖醋鸡翅","糯米绿豆汤","糯米酒炒鸡","素炒小白菜","素炒黄豆芽","素烤鸭","素烧鹅","素红烧肉","紫菜肉片豆腐汤","紫酥鸡","红油鸡片","红烧凤翅","红烧牛腩","红烧牛腩面","红烧狮子头(四喜丸子)","红烧猪蹄筋","红烧鲈鱼","红烧鲫鱼 全程图解","红烧鳗鱼","红烧鸡/红烧鸡肉","红烧鸭/红烧鸭子","红焖珍珠鸡","红糟肉","纯手工草莓酱","绿豆煲田鸡","美味肉串","翡翠火鸡片","肉丝炒蒜黄","肉丝锅饼","肉末土豆泥","肉末雪菜蒸豆腐","肉片炒青椒","胡椒牛肉汤","胡萝卜布丁","胡萝卜炒木耳","胡萝卜炖羊排","胡萝卜烧羊肉","胡萝卜牛肉水饺","胡萝卜猪肝汤","腐皮卷素菜","自制双莓酸奶","自制豆腐","自制豆腐花、内酯豆腐","节后清脂减肥的干贝冬瓜球","芝麻菠菜拌豆腐","芝麻金茸","芥末鸡片","花生酥糖","花生银鱼","芹菜拌豆腐","芹菜炒猪肝","芹菜炒香干","芹菜苹果汁","芽菜蛋羹","苏式叉烧肉","苘蒿豆干","苦瓜酿香蕉","苦甜巧克力起司蛋糕","苦菊银耳沙拉","苹果汤","苹果醋","茄子拌芦荟酱","茄子蛋糊","茄汁烹鸡腿","茄汁藕松","茄汁鱼片","茭瓜炒肉","草莓派","草莓起司蛋糕","草莓酒冻","草莓酸奶","草莓酸奶冰淇淋","草菇猪心肉片饭","草鱼粉皮煲","荠菜家常饼","荷包蛋饭","荷叶薏米冬瓜汤","荸荠炒荷兰豆","莲子百合炖瘦肉","莲米苡仁排骨","菇笋萝卜豆腐汤","菜团子","菜心炒肉片","菜心狮子头","菠菜汤","菠菜煮猪肝","菠菜牛骨汤","菠菜粉丝汤","菠萝明虾片","萝卜丝老鸭汤","萝卜丝饼","萝卜牛肉汤","萝卜花的制作与糖醋萝卜丝","葡萄干蛋糕卷","葡萄果汁","葱头萝卜排骨汤","葱油大虾","葱油豆腐","葱油鲜炒蚕豆瓣","葱油鲩鱼","葱烧兔肉","葱辣大虾","葱辣鸭肝","葱香秋葵","蒜烧海蟹","蒜苗拌豆腐","蒜香吞拿鱼意面","蒜香排骨","蒜香鸡翅","蓝山乳酪蛋糕","蔓越莓果酱小点","蔬菜沙拉","薏米腐竹煲猪肚","藜麦红薯好粥道","虎皮茄子","虎蛋糕卷","虾仁烧卖","虾皮汤","蚌肉豆腐汤","蚕豆泥拌雪里蕻","蚕豆瓣炒蟹味菇","蚝油杏鲍菇","蛋煎白饭鱼","蜜汁烤翅","蝴蝶豆腐","补肾又益肺的冬虫夏草枸杞汤","补脑益智羹","补血强骨的菠菜猪肝粥","裹烧茭白","西洋风味面","西米银耳羹","西红柿打卤面","豆干拌黄瓜","豆干炒肉丝","豆干牛肉丝","豆瓣鱼","豆腐丸","豆腐汉堡包","豆腐白菜丁","豆腐皮汤","豆腐花","豆腐螃蟹煲","豆腐鱼头汤","豆花鱼","豆芽炒肉丁","豆芽炖排骨","豆角炒肉","豆豉烧豆腐","豉汁炒鸡翼球","豉油豆腐","象牙丝浮小麦猪骨汤","赤小豆牛肉汤","软炸对虾段","软炸带鱼","软炸珍珠鸡卷","软炸虾仁","软煎牛肉","软熘果仁虾丁","软熘虾片","软熘豆腐(二)","辣味珍珠鸡丁","辣味茄子","酒渍樱桃乳酪蛋糕","酒酿蛋","酥炸卤鸭","酥皮大虾","酥皮豆腐","酱南瓜","酱咸桃仁","酱排骨","酱明太鱼干","酱汁牛肉","酱汁香干","酱汁鸭肝(二)","酱油瓜片","酱烧茄子","酱香土豆泥","酱鸡腿","酱黄豆","酸梅汤","酸菜煮鱼","酸菜牛柳丝","酸菜鱼片汤","酸辣鱿鱼片","醋烹鲫鱼","野莓乳酪蛋糕","金针菇烧豆腐","金龙戏白玉","银耳鸽汤","锅烧整鸡","锅爆肉","防治手足口病的苋菜竹笋炒鸡丝","阳光西柚苹果汁","雪丽对虾","雪菜肉末四季豆","青椒兔柳","青椒拌香干丝","青椒牛肉","青椒绿豆芽","青椒肉丁","青豆炒素虾仁","面片甩袖汤","韩国海带汤","韩国辣白菜","韩式酱煮黑豆","韩式金皮南瓜粥","韭菜拌豆腐","饭饭香烤兔肉","首乌牛肉汤","香卤鹌鹑蛋","香干牛肉","香梨沙拉","香椿头拌豆腐","香肠煎蛋","香芋扣肉","香芋汽锅乌鸡","香菇土豆炖肉","香菇炒板栗","香菇豆腐羹","香菜拌牛肉","香菜牛肉丝","香葱八带","香葱拌干丝","香葱拌豆腐","香蕉乳酪卷","香蕉奶油派","香辣红烧带鱼","香酥排骨","香酥活鲤鱼","马铃薯煎鸭脯","骨头酥汤","魔芋野鸭","鱼头炖豆腐","鱼头豆腐汤","鱼头通菜瘦肉汤","鱼汁杂鱼煲","鱼香排骨","鱼香豆腐","鲜橙煎软鸭","鲜茄蛋花汤","鲜虾粥","鲢鱼头豆腐汤","鸡汁蔬菜条","鸡火汤","鸡蓉葵花汤","鸭黄豆角","麻辣香水鱼","麻辣鸡","麻酱拌山苜楂菜","黄州东坡肉","黄瓜炒子虾","黄花鸡丝汤","黄豆猪手汤","黄豆肉皮冻","黄豆芽排骨","黄金海鲜火锅","黄鱼烧豆腐","黑木耳炒猪肝2","黑樱桃派","黑芝麻糊","黑豆焖高原鸡","黑面包"]} @@ -36,7 +37,7 @@ public class Illness { '}'; } - public static class MenuClassificationBean { + public static class MenuClassificationBean implements Serializable{ /** * classification : 青少年食谱 * cure_occupation : ["学生"] @@ -81,7 +82,7 @@ public class Illness { } } - public static class ElementsBean { + public static class ElementsBean implements Serializable{ /** * id : 84 * calorie : 1.1 diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Material.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Material.java index ef32b29..bc6a70b 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Material.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Material.java @@ -1,31 +1,106 @@ package com.example.ninefourone.nutritionmaster.bean; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; +import com.orhanobut.logger.Logger; + +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; + /** - * Created by ScorpioMiku on 2018/9/11. + * Created by ScorpioMiku on 2018/10/7. */ -public class Material { - private String materialName; - private float weight; +public class Material implements Serializable { + FoodMaterial foodMaterial; + ArrayList menus = new ArrayList<>(); - public Material(String materialName, float weight) { - this.materialName = materialName; - this.weight = weight; + public FoodMaterial getFoodMaterial() { + return foodMaterial; } - public String getMaterialName() { - return materialName; + public void setFoodMaterial(FoodMaterial foodMaterial) { + this.foodMaterial = foodMaterial; + try { + int max = foodMaterial.getCook_quantity().size() > 30 ? 30 : foodMaterial.getCook_quantity().size(); + for (int i = 0; i < max; i++) { + WebUtil webUtil = WebUtil.getInstance(); + FoodMaterial.CookQuantityBean temp = foodMaterial.getCook_quantity().get(i); + String menuName = temp.getMenu(); + webUtil.getMenu(menuName, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + try { + FoodMenu menu = new Gson().fromJson(json, FoodMenu.class); + if (!menu.getImage_url().equals("0")) { + menus.add(menu); +// Logger.d(menu); + } + }catch (Exception e){ +// Logger.e(json); + e.printStackTrace(); + } + + } + }); + } + }catch (Exception e){ + e.printStackTrace(); +// MessageUtils.MakeToast("您当前拍摄的食材没有录入服务器"); + } } - public void setMaterialName(String materialName) { - this.materialName = materialName; + public ArrayList getMenus() { + return menus; } - public float getWeight() { - return weight; + public void setMenus(ArrayList menus) { + this.menus = menus; } - public void setWeight(float weight) { - this.weight = weight; + @Override + public String toString() { + return foodMaterial.toString() + "\nsize:" + menus.size(); + } + + private void addMenu(final int index, final int max) { + WebUtil webUtil = WebUtil.getInstance(); + FoodMaterial.CookQuantityBean temp = foodMaterial.getCook_quantity().get(index); + String menuName = temp.getMenu(); + Logger.d(menuName); + webUtil.getMenu(menuName, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Logger.d(response.body().string()); + FoodMenu menu = new Gson().fromJson(response.body().string(), FoodMenu.class); + menus.add(menu); + if (index < max) { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + addMenu(index + 1, max); + } + }); + thread.start(); + } + } + }); } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Menu.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Menu.java deleted file mode 100644 index 3cddc86..0000000 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Menu.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.example.ninefourone.nutritionmaster.bean; - -import java.util.ArrayList; - -/** - * Created by ScorpioMiku on 2018/9/9. - */ - -public class Menu { - private String menuName; - private ArrayList materialArrayList; - private ArrayList makeSteps; - - - public Menu(String menuName, ArrayList materialArrayList, ArrayList makeSteps) { - this.menuName = menuName; - this.materialArrayList = materialArrayList; - this.makeSteps = makeSteps; - } - - public String getMenuName() { - return menuName; - } - - public void setMenuName(String menuName) { - this.menuName = menuName; - } - - public ArrayList getMaterialArrayList() { - return materialArrayList; - } - - public void setMaterialArrayList(ArrayList materialArrayList) { - this.materialArrayList = materialArrayList; - } - - public ArrayList getMakeSteps() { - return makeSteps; - } - - public void setMakeSteps(ArrayList makeSteps) { - this.makeSteps = makeSteps; - } -} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MenuClassification.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MenuClassification.java index e73c3e0..19e4d4f 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MenuClassification.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MenuClassification.java @@ -1,8 +1,9 @@ package com.example.ninefourone.nutritionmaster.bean; +import java.io.Serializable; import java.util.List; -public class MenuClassification { +public class MenuClassification implements Serializable{ /** * 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 3c8c8d8..1d52635 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 @@ -30,7 +30,7 @@ public class MyUser { */ private Integer id; - private EatenElementsBean eaten_elements; + private EatenElementsBean eaten_elements = new EatenElementsBean(); private String physical_name; private String password; private Object last_login; @@ -42,12 +42,12 @@ public class MyUser { private Boolean is_staff; private Boolean is_active; private String date_joined; - private Integer sex; + private Integer sex = 1; private Integer age; private Integer height; private Integer weight; private Integer bmi = new Integer(-1); - private String occupation_name; + private String occupation_name = ""; private List groups; private List user_permissions; private List illness; @@ -85,6 +85,12 @@ public class MyUser { '}'; } + + public void changeElement(EatenElementsBean eaten_elements) { + + } + + public Integer getId() { return id; } @@ -292,7 +298,7 @@ public class MyUser { */ private double id; - private double calorie; + private double calorie = 1; private double carbohydrate; private double fat; private double protein; @@ -557,5 +563,33 @@ public class MyUser { public void setThiamine(double thiamine) { this.thiamine = thiamine; } + + public void add(Element element, float factor) { + calorie += element.getCalorie() * factor; + carbohydrate += (float) element.getCarbohydrate() * factor; + fat += (float) element.getFat() * factor; + protein += (float) element.getProtein() * factor; + cellulose += (float) element.getCellulose() * factor; + vitaminA += (float) element.getVitaminA() * factor; + vitaminB1 += element.getVitaminB1() * factor; + vitaminB2 += (float) element.getVitaminB2() * factor; + vitaminB6 += element.getVitaminB6() * factor; + vitaminC += (float) element.getVitaminC() * factor; + vitaminE += (float) element.getVitaminE() * factor; + carotene += (float) element.getCarotene() * factor; + cholesterol += (float) element.getCholesterol() * factor; + Mg += (float) element.getMg() * factor; + Ca += (float) element.getCa() * factor; + Fe += (float) element.getFe() * factor; + Zn += (float) element.getZn() * factor; + Cu += (float) element.getCu() * factor; + Mn += (float) element.getMn() * factor; + K += (float) element.getK() * factor; + P += (float) element.getP() * factor; + Na += (float) element.getNa() * factor; + Se += (float) element.getSe() * factor; + niacin += (float) element.getNiacin() * factor; + thiamine += (float) element.getThiamine() * factor; + } } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Physique.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Physique.java index 3b0b8fd..95e877d 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Physique.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/Physique.java @@ -392,5 +392,7 @@ public class Physique { this.thiamine = thiamine; } + + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/RecommendFood.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/RecommendFood.java index 7575671..64e032a 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/RecommendFood.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/RecommendFood.java @@ -16,35 +16,32 @@ public class RecommendFood implements MultiItemEntity, Serializable { public static final int TYPE_MIDDLE = 1; public static final int TYPE_DETAIL = 2; - private int picture; + private String picture; private String title; private String description; private int type; - private Menu menu; + private FoodMenu menu; - public Menu getMenu() { + public FoodMenu getMenu() { return menu; } - public void setMenu(Menu menu) { + public void setMenu(FoodMenu menu) { this.menu = menu; } - public RecommendFood(int picture, String title, String description, int type) { - this.picture = picture; - this.title = title; - this.description = description; + public RecommendFood(FoodMenu foodMenu, int type) { + menu = foodMenu; + picture = foodMenu.getImage_url(); + title = foodMenu.getName(); this.type = type; - if (type > 2) { - Logger.e("混合recycler type不对"); - } } - public int getPicture() { + public String getPicture() { return picture; } - public void setPicture(int picture) { + public void setPicture(String picture) { this.picture = picture; } @@ -68,4 +65,10 @@ public class RecommendFood implements MultiItemEntity, Serializable { public int getItemType() { return type; } + + @Override + public String toString() { + return menu.toString(); + + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java index cea18f3..950100a 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java @@ -4,11 +4,16 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.hardware.Camera; import android.os.Bundle; +import android.os.Environment; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Base64; +import android.util.Log; import android.view.Surface; import android.view.View; import android.view.Window; @@ -18,13 +23,16 @@ import android.widget.ImageView; import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.base.BaseFragment; import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity; import com.example.ninefourone.nutritionmaster.modules.classifyresult.MaterialResultActivity; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MaterialClassifier; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; import com.orhanobut.logger.Logger; import com.youdao.sdk.app.Language; import com.youdao.sdk.app.LanguageUtils; @@ -37,6 +45,10 @@ import com.youdao.sdk.ydtranslate.TranslateParameters; import org.json.JSONArray; import org.json.JSONObject; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -44,6 +56,9 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; /** * Created by ScorpioMiku on 2018/9/3. @@ -171,7 +186,20 @@ public class ClassifierCamera extends AppCompatActivity { private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(final byte[] data, Camera camera) { + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); + bitmap = rotateBitmapByDegree(bitmap, 90); + //缩放 + bitmap = Bitmap.createScaledBitmap(bitmap, 720, 1280, false); try { + final File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); + final String pictureName = System.currentTimeMillis() + ".jpg"; + final String picturePath = pictureDir + File.separator + pictureName; + File file = new File(picturePath); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); + bos.flush(); + bos.close(); + String imgStr = Base64.encodeToString(data, Base64.DEFAULT); String imgParam = URLEncoder.encode(imgStr, "UTF-8"); final String param = "image=" + imgParam + "&top_num=" + 1; @@ -186,6 +214,7 @@ public class ClassifierCamera extends AppCompatActivity { result = jsonObject.getJSONArray("objects") .getJSONObject(0).getString("value"); translate(result); + refreshUI(); } else if (code == DISH_CODE) { result = WebUtil.HttpPost(ConstantUtils.BD_DISH_URL, ConstantUtils.BD_ACCESS_TOKEN, param); @@ -194,10 +223,12 @@ public class ClassifierCamera extends AppCompatActivity { JSONArray resultObject = jsonObject.getJSONArray("result"); jsonObject = resultObject.getJSONObject(0); classifyResult.setCalorie(jsonObject.getInt("calorie")); + Logger.d(jsonObject.getInt("calorie")); classifyResult.setHas_calorie(jsonObject.getBoolean("has_calorie")); classifyResult.setProbability(jsonObject.getDouble("probability")); classifyResult.setName(jsonObject.getString("name")); classifyResult.getMenu(); + classifyResult.setImgPath(picturePath); resultList.add(classifyResult); refreshUI(); } else { @@ -224,7 +255,11 @@ public class ClassifierCamera extends AppCompatActivity { * * @param view */ +<<<<<<< HEAD @OnClick({R.id.more_take_photo_button_capture, R.id.more_takephoto_ok,R.id.results_text_view}) +======= + @OnClick({R.id.more_take_photo_button_capture, R.id.more_takephoto_ok, R.id.results_text_view}) +>>>>>>> develop public void onViewClicked(View view) { switch (view.getId()) { case R.id.more_take_photo_button_capture: @@ -232,22 +267,53 @@ public class ClassifierCamera extends AppCompatActivity { cameraCoverLinearlayout.setVisibility(View.VISIBLE); break; case R.id.more_takephoto_ok: - Intent intent; + final Intent intent; if (code == DISH_CODE) { intent = new Intent(ClassifierCamera.this, DishResultActivity.class); + intent.putExtra("LIST", resultList); + startActivity(intent); } else { intent = new Intent(ClassifierCamera.this, MaterialResultActivity.class); + + //把拍照结果的食材名字放到新的List:materials里面 + List materials = new ArrayList<>(); + for (ClassifyResult classifyResult : resultList) { + materials.add(classifyResult.getName()); + } + WebUtil.getInstance().getMenusByMaterials(materials, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, final Response response) throws IOException { + String json = response.body().string(); + FoodMenu[] menus = new Gson().fromJson(json, FoodMenu[].class); + ArrayList menuList = new ArrayList<>(); + for (FoodMenu foodMenu : menus) { + menuList.add(foodMenu); + } + intent.putExtra("LIST", menuList); + startActivity(intent); + } + }); + + } - intent.putExtra("LIST", resultList); - startActivity(intent); resultList.clear(); refreshUI(); finish(); break; case R.id.results_text_view: +<<<<<<< HEAD +======= + resultList.remove(resultList.size() - 1); + refreshUI(); +>>>>>>> develop break; } } @@ -326,7 +392,7 @@ public class ClassifierCamera extends AppCompatActivity { public void onResult(Translate translate, String s, String s1) { String result = ""; result = translate.getTranslations().get(0); -// Logger.d(result); + Logger.d(result); ClassifyResult classifyResult = new ClassifyResult(ClassifyResult.MATERIAL); classifyResult.setName(result); resultList.add(classifyResult); @@ -339,4 +405,26 @@ public class ClassifierCamera extends AppCompatActivity { } }); } + + //修改图片保存方向 + public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) { + Bitmap returnBm = null; + + //Matrix图片动作(旋转平移) + Matrix matrix = new Matrix(); + matrix.postRotate(degree); + + try { + returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); + } catch (OutOfMemoryError e) { + + } + if (returnBm == null) { + returnBm = bm; + } + if (bm != returnBm) { + bm.recycle(); + } + return returnBm; + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java index 0de001b..bfedb64 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java @@ -30,9 +30,11 @@ import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.HomePagerAdapter; import com.example.ninefourone.nutritionmaster.adapter.IllAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.Illness; import com.example.ninefourone.nutritionmaster.camera.ClassifierCamera; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddInformationActivity; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddPhysiqueActivity; +import com.example.ninefourone.nutritionmaster.modules.historysearch.HistoryActivity; import com.example.ninefourone.nutritionmaster.modules.information.InformationActivity; import com.example.ninefourone.nutritionmaster.ui.NoScrollViewPager; import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; @@ -50,6 +52,7 @@ import com.github.mikephil.charting.data.RadarDataSet; import com.github.mikephil.charting.data.RadarEntry; import com.github.mikephil.charting.formatter.IndexAxisValueFormatter; import com.github.siyamed.shapeimageview.CircularImageView; +import com.google.gson.Gson; import com.miguelcatalan.materialsearchview.MaterialSearchView; import com.mxn.soul.flowingdrawer_core.ElasticDrawer; import com.mxn.soul.flowingdrawer_core.FlowingDrawer; @@ -58,12 +61,16 @@ import com.nightonke.boommenu.BoomButtons.OnBMClickListener; import com.nightonke.boommenu.BoomMenuButton; import com.orhanobut.logger.Logger; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class MainActivity extends BaseActivity { @@ -130,6 +137,9 @@ public class MainActivity extends BaseActivity { private ArrayList userIllness = new ArrayList<>(); private IllAdapter illAdapter; + private HomePagerAdapter homePagerAdapter; + + public static float[] scores = {3.1f, 2.5f, 1.7f, 5.9f, 4.6f}; @Override public int getLayoutId() { @@ -146,6 +156,7 @@ public class MainActivity extends BaseActivity { public void onDrawerStateChange(int oldState, int newState) { if (newState == ElasticDrawer.STATE_CLOSED) { titleLayout.setBackgroundColor(getColor(R.color.colorPrimary)); + homePagerAdapter.rereshUI(); } else { titleLayout.setBackgroundColor(getColor(R.color.bar_open)); } @@ -156,7 +167,7 @@ public class MainActivity extends BaseActivity { // Logger.i("openRatio=" + openRatio + " ,offsetPixels=" + offsetPixels); } }); - initSpiderView(); + initViewPager(); initSearchView(); initBMB(); @@ -167,7 +178,7 @@ public class MainActivity extends BaseActivity { * 初始化ViewPager */ private void initViewPager() { - HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), + homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), this); viewPager.setOffscreenPageLimit(3); viewPager.setAdapter(homePagerAdapter); @@ -181,7 +192,7 @@ public class MainActivity extends BaseActivity { @Override public void initToolBar() { - toolBarNickname.setText(user.getUsername()); + toolBarNickname.setText("NutritionMaster"); } @Override @@ -211,6 +222,24 @@ public class MainActivity extends BaseActivity { return true; } + /** + * 点击事件 + */ + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.id_action_search: + return true; + case R.id.id_action_record: + Intent intent = new Intent(MainActivity.this, HistoryActivity.class); + startActivity(intent); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + @Override public boolean onPrepareOptionsMenu(Menu menu) { // Logger.d("prepareMenu"); @@ -220,16 +249,12 @@ public class MainActivity extends BaseActivity { //mDrawer.openMenu(); - /** - * 点击事件 - */ - /** * 初始化蛛网图 */ private void initSpiderView() { - float[] scores = {9.1f, 5.5f, 7.7f, 8.9f, 4.6f}; + String[] flags = {"糖分", "淡水", "蛋白质", "维生素", "矿物质"}; List radarEntries = new ArrayList<>(); @@ -290,6 +315,15 @@ public class MainActivity extends BaseActivity { } + public void refreshSpider() { + for (int i = 0; i < scores.length; i++) { + scores[i] += (1 - i / 2); + if (scores[i] >= 10) { + scores[i] = 9.9f; + } + } + } + /** * 初始化SearchView */ @@ -297,7 +331,7 @@ public class MainActivity extends BaseActivity { searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { - MessageUtils.MakeToast(query); + return false; } @@ -362,7 +396,7 @@ public class MainActivity extends BaseActivity { private void initInforView() { adderInfor.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); - changeInformation.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); + changeInformation.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); if (NutritionMaster.user.getHeight() != 0) { showInformation.setVisibility(View.VISIBLE); adderInfor.setVisibility(View.INVISIBLE); @@ -395,7 +429,7 @@ public class MainActivity extends BaseActivity { */ @OnClick({R.id.navigation_layout, R.id.add_information_button, R.id.information_layout, - R.id.user_occupation_text, R.id.adder_infor,R.id.change_information}) + R.id.user_occupation_text, R.id.adder_infor, R.id.change_information}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.navigation_layout: @@ -514,9 +548,9 @@ public class MainActivity extends BaseActivity { weightBar.setSecondaryProgressColor(getColor(R.color.color_bar_self)); } - Logger.d("bmi:" + averageBmi / maxBmi * 100.0f + "|" + bmi / maxBmi * 100.0f + "\n" + - "height:" + averageHeight / maxHeight * 100.0f + "|" + height / maxHeight * 100.0f + "\n" + - "weight" + averageWeight / maxWeight * 100.0f + "|" + weight / maxWeight * 100.0f); +// Logger.d("bmi:" + averageBmi / maxBmi * 100.0f + "|" + bmi / maxBmi * 100.0f + "\n" + +// "height:" + averageHeight / maxHeight * 100.0f + "|" + height / maxHeight * 100.0f + "\n" + +// "weight" + averageWeight / maxWeight * 100.0f + "|" + weight / maxWeight * 100.0f); } @@ -537,17 +571,69 @@ public class MainActivity extends BaseActivity { */ @OnClick(R.id.ill_button) public void onViewClicked() { - illPicker = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() { + + } + + @Override + protected void onResume() { + super.onResume(); +// if (NutritionMaster.occupation==null||NutritionMaster.illness==null){ +// illButton.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// MessageUtils.MakeToast("请先填写职业信息和体质信息再使用"); +// } +// }); +// }else{ + initSpiderView(); + illButton.setOnClickListener(new View.OnClickListener() { @Override - public void onOptionsSelect(int options1, int options2, int options3, View v) { - userIllness.add(illness.get(options1)); - illAdapter.notifyDataSetChanged(); - illButton.setBackgroundResource(0); + public void onClick(View v) { + illPicker = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int options2, int options3, View v) { + final String illname = illness.get(options1); + getWebUtil().getIllness(illname, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + Illness illness = new Gson().fromJson(json, Illness.class); + NutritionMaster.illness = illness; + Logger.d(NutritionMaster.illness); + if (NutritionMaster.physique != null && NutritionMaster.occupation != null) { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + illRecyclerView.post(new Runnable() { + @Override + public void run() { + userIllness.add(illname); + illAdapter.notifyDataSetChanged(); + illAdapter.notifyDataSetChanged(); + if (NutritionMaster.occupation != null && NutritionMaster.physique != null) { + NutritionMaster.element = CalculateUtils.getElementsAddIllness(NutritionMaster.illness, + NutritionMaster.user, NutritionMaster.occupation, NutritionMaster.physique); + } + } + }); + } + }); + thread.start(); + } + } + }); + } + }).build(); + illPicker.setPicker(illness); + illPicker.show(); } - }).build(); - MessageUtils.MakeToast("dianjile"); - illPicker.setPicker(illness); - illPicker.show(); + }); +// } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/RecipeActivity/RecipeActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/RecipeActivity/RecipeActivity.java index b5c24d6..f3264a3 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/RecipeActivity/RecipeActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/RecipeActivity/RecipeActivity.java @@ -4,21 +4,34 @@ import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.widget.ImageView; +import android.widget.TextView; +import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.MakeStepAdapter; import com.example.ninefourone.nutritionmaster.adapter.MaterialAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; -import com.example.ninefourone.nutritionmaster.bean.Material; -import com.example.ninefourone.nutritionmaster.bean.Menu; +import com.example.ninefourone.nutritionmaster.bean.Element; import com.example.ninefourone.nutritionmaster.bean.RecommendFood; -import com.example.ninefourone.nutritionmaster.utils.UiUtils; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.github.lzyzsd.circleprogress.ArcProgress; +import com.nightonke.boommenu.BoomButtons.HamButton; +import com.nightonke.boommenu.BoomButtons.OnBMClickListener; +import com.nightonke.boommenu.BoomMenuButton; import com.orhanobut.logger.Logger; -import java.util.ArrayList; +import java.io.IOException; +import java.util.HashMap; import butterknife.BindView; +import butterknife.OnClick; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class RecipeActivity extends BaseActivity { @@ -33,8 +46,22 @@ public class RecipeActivity extends BaseActivity { RecyclerView materialRecyclerView; @BindView(R.id.detail_way_recycler_view) RecyclerView detailWayRecyclerView; + @BindView(R.id.image) + ImageView image; + @BindView(R.id.name) + TextView name; + @BindView(R.id.back_button) + ImageView backButton; + @BindView(R.id.protein_text) + TextView proteinText; + @BindView(R.id.fat_text) + TextView fatText; + @BindView(R.id.suger_text) + TextView sugerText; + @BindView(R.id.boom_menu_button) + BoomMenuButton boomMenuButton; private RecommendFood recommendFood; - private Menu menu; + private MaterialAdapter materialAdapter; private MakeStepAdapter makeStepAdapter; @@ -53,7 +80,18 @@ public class RecipeActivity extends BaseActivity { public void initViews(Bundle savedInstanceState) { Intent intent = getIntent(); recommendFood = (RecommendFood) intent.getSerializableExtra("SEND_OBJECT"); + Glide.with(RecipeActivity.this).load(recommendFood.getPicture()).into(image); + name.setText(recommendFood.getMenu().getName()); + HashMap map = CalculateUtils.elementsProportion(recommendFood.getMenu().getElements()); + proteinCircle.setProgress((int) map.get("protein")); + fatCircle.setProgress((int) map.get("fat")); + carbohydrateCircle.setProgress((int) map.get("suger")); + proteinText.setText(new Double(recommendFood.getMenu().getElements().getProtein()).intValue() + "克"); + fatText.setText(new Double(recommendFood.getMenu().getElements().getFat()).intValue() + "克"); + sugerText.setText(new Double(recommendFood.getMenu().getElements().getCarbohydrate()).intValue() + "克"); +// Logger.d(recommendFood.getMenu().getPractice()); initList(); + initBMB(); } @Override @@ -67,25 +105,55 @@ public class RecipeActivity extends BaseActivity { } private void initList() { - ArrayList list = new ArrayList<>(); - for (int i = 0; i < 7; i++) { - Material material = new Material("毛豆", 100); - list.add(material); - } - ArrayList mList = new ArrayList<>(); - for (int i = 0; i < 7; i++) { - String step = "第一步"; - mList.add(step); - } - menu = new Menu("毛豆炒肉", list, mList); - - makeStepAdapter = new MakeStepAdapter(menu.getMakeSteps(), this); - detailWayRecyclerView.setAdapter(makeStepAdapter); - detailWayRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - - materialAdapter = new MaterialAdapter(menu.getMaterialArrayList(), this); + materialAdapter = new MaterialAdapter(recommendFood.getMenu().getCook_quantity(), RecipeActivity.this); materialRecyclerView.setAdapter(materialAdapter); - materialRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + materialRecyclerView.setLayoutManager(new LinearLayoutManager(RecipeActivity.this)); + materialRecyclerView.setNestedScrollingEnabled(false); + + makeStepAdapter = new MakeStepAdapter( + CalculateUtils.getStepArray(recommendFood.getMenu().getPractice()), RecipeActivity.this); + detailWayRecyclerView.setLayoutManager(new LinearLayoutManager(RecipeActivity.this)); + detailWayRecyclerView.setAdapter(makeStepAdapter); + detailWayRecyclerView.setNestedScrollingEnabled(false); } + + /** + * 初始化悬浮按钮 + */ + private void initBMB() { + HamButton.Builder builder = new HamButton.Builder() + .normalImageRes(R.drawable.ic_add_recipe) + .normalTextRes(R.string.recipe_add_string) + .listener(new OnBMClickListener() { + @Override + public void onBoomButtonClick(int index) { + MessageUtils.MakeToast("已添加到记录"); + NutritionMaster.randomSeed = CalculateUtils.getSecond(); + + Element element = new Element(recommendFood.getMenu().getElements()); + NutritionMaster.user.getEaten_elements().add(element, 0.7f); + + String username = NutritionMaster.user.getUsername(); + WebUtil.getInstance().addEatenHistory(username, recommendFood.getMenu().getName(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + + } + }); + + } + }); + boomMenuButton.addBuilder(builder); + } + + @OnClick(R.id.back_button) + public void onViewClicked() { + finish(); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddInformationActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddInformationActivity.java index bea077e..db07939 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddInformationActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddInformationActivity.java @@ -14,10 +14,19 @@ import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.base.BaseActivity; import com.example.ninefourone.nutritionmaster.bean.MyUser; +import com.example.ninefourone.nutritionmaster.bean.Occupation; import com.example.ninefourone.nutritionmaster.modules.MainActivity; import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.google.gson.Gson; +import com.orhanobut.logger.Logger; + +import java.io.IOException; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class AddInformationActivity extends BaseActivity { private TextView ageTextView; @@ -70,6 +79,8 @@ public class AddInformationActivity extends BaseActivity { @Override public void onOptionsSelect(int options1, int options2, int options3, View v) { occupationTextView.setText(ConstantUtils.occupationList.get(options1)); + getOccupation(ConstantUtils.occupationList.get(options1)); + } }).build(); occupationPicker.setPicker(ConstantUtils.occupationList); @@ -158,10 +169,18 @@ public class AddInformationActivity extends BaseActivity { user.setAge(Integer.valueOf(ageTextView.getText().toString().split("岁")[0])); user.setSex(CalculateUtils.sex2int(sexTextView.getText().toString())); user.setOccupation_name(occupationTextView.getText().toString()); - float BMI = CalculateUtils.BMI(user.getHeight().floatValue(),user.getWeight().floatValue()); - user.setBmi(Integer.valueOf((int)BMI)); + float BMI = CalculateUtils.BMI(user.getHeight().floatValue(), user.getWeight().floatValue()); + user.setBmi(Integer.valueOf((int) BMI)); upUser(); MessageUtils.MakeToast("信息填写成功"); + if (NutritionMaster.physique == null) { + NutritionMaster.element = + CalculateUtils.getElementsByOccupation(NutritionMaster.user, NutritionMaster.occupation); + } else { + NutritionMaster.element = + CalculateUtils.getElementsByOccupationAndPhysique(NutritionMaster.user, + NutritionMaster.occupation, NutritionMaster.physique); + } finish(); } @@ -179,4 +198,21 @@ public class AddInformationActivity extends BaseActivity { public void onPointerCaptureChanged(boolean hasCapture) { } + + private void getOccupation(String text) { + getWebUtil().getOccupation(text, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + Occupation occupation = new Gson().fromJson(json, Occupation.class); + NutritionMaster.occupation = occupation; + Logger.d(NutritionMaster.occupation); + } + }); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddPhysiqueActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddPhysiqueActivity.java index a16d115..6b85709 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddPhysiqueActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/addinformation/AddPhysiqueActivity.java @@ -14,20 +14,28 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.base.BaseActivity; import com.example.ninefourone.nutritionmaster.bean.Physique; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.github.czy1121.view.TurnCardListView; import com.github.siyamed.shapeimageview.CircularImageView; +import com.google.gson.Gson; import com.orhanobut.logger.Logger; +import java.io.IOException; import java.util.Arrays; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class AddPhysiqueActivity extends BaseActivity { @@ -381,6 +389,9 @@ public class AddPhysiqueActivity extends BaseActivity { } } physique = physiques[maxIndex]; + if (physique.equals("淤血质")) { + physique = "瘀血质"; + } Logger.d(Arrays.toString(counter) + "\n" + physique); Physique phy = new Physique(); phy.setPhysical_name(physique); @@ -393,6 +404,31 @@ public class AddPhysiqueActivity extends BaseActivity { upUser(); loadInformation(phy); + /** + * 加载体质信息 + */ + getWebUtil().getPhysique(physique, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + Physique physique = new Gson().fromJson(json, Physique.class); + NutritionMaster.physique = physique; + if (NutritionMaster.occupation == null) { + NutritionMaster.element = + CalculateUtils.getElementsByPhysique(NutritionMaster.user, NutritionMaster.physique); + } else { + NutritionMaster.element = + CalculateUtils.getElementsByOccupationAndPhysique(NutritionMaster.user, + NutritionMaster.occupation, NutritionMaster.physique); + } + } + }); + } @Override diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java index fb6b9f4..34a751a 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java @@ -7,17 +7,18 @@ import android.support.v7.widget.RecyclerView; import android.widget.Button; import android.widget.TextView; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.ResultListAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; -import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; -import com.orhanobut.logger.Logger; +import com.example.ninefourone.nutritionmaster.bean.Element; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import java.util.ArrayList; -import java.util.Arrays; import butterknife.BindView; +import butterknife.OnClick; public class DishResultActivity extends BaseActivity { @@ -35,13 +36,17 @@ public class DishResultActivity extends BaseActivity { Button okButton; + private int flag = 0; private ArrayList results; private ResultListAdapter resultListAdapter; + private float wholesum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + flag = 0; + wholesum = 0 ; } @Override @@ -53,10 +58,7 @@ public class DishResultActivity extends BaseActivity { public void initViews(Bundle savedInstanceState) { Intent intent = getIntent(); results = (ArrayList) intent.getSerializableExtra("LIST"); -// for (int i = 0; i < results.size(); i++) { -// Logger.d(results.get(i)); -// } -// results = ConstantUtils.testData; + resultListAdapter = new ResultListAdapter(results, this); recyclerView.setAdapter(resultListAdapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); @@ -91,10 +93,44 @@ public class DishResultActivity extends BaseActivity { sugarSum += results.get(i).getFoodMenu().getElements().getCarbohydrate() * results.get(i).getQuantity() / 100; proteinSum += results.get(i).getFoodMenu().getElements().getProtein() * results.get(i).getQuantity() / 100; } + if (flag == 0) { + calorieSum = checkData((int) calorieSum); + } else if (flag == -1) { + + } else { + calorieSum = calorieSum - flag * 300; + } + wholesum = calorieSum; calorie.setText((int) calorieSum + ""); protein.setText((int) proteinSum + ""); fat.setText((int) fatSum + ""); suger.setText((int) sugarSum + ""); } + @OnClick(R.id.ok_button) + public void onViewClicked() { + double tempCalorie = 0; + MessageUtils.MakeToast("已将信息加入到已吃记录"); + for (int i = 0; i < results.size(); i++) { + tempCalorie += NutritionMaster.user.getEaten_elements().getCalorie(); + results.get(i).getFoodMenu().getElements().setCalorie(0); + NutritionMaster.user.getEaten_elements().add(new Element(results.get(i).getFoodMenu().getElements()), + 1.5f); + } + NutritionMaster.user.getEaten_elements().setCalorie( + (int) (NutritionMaster.user.getEaten_elements().getCalorie() + wholesum)); + finish(); + } + + private int checkData(int data) { + if (data < 1000) { + if (flag == 0) { + flag = -1; + } + return data; + } else { + flag++; + return checkData(data - 300); + } + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java index 2ef5b8b..2841eec 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java @@ -1,14 +1,41 @@ package com.example.ninefourone.nutritionmaster.modules.classifyresult; -import android.support.v7.app.AppCompatActivity; +import android.content.Intent; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.MaterialResultAdapter; +import com.example.ninefourone.nutritionmaster.adapter.MaterialResultHolder; import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.Material; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; +import com.orhanobut.logger.Logger; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class MaterialResultActivity extends BaseActivity { + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + ArrayList classifyResults; + ArrayList list; + private MaterialResultAdapter adapter; + @Override public int getLayoutId() { return R.layout.activity_material_result; @@ -16,6 +43,15 @@ public class MaterialResultActivity extends BaseActivity { @Override public void initViews(Bundle savedInstanceState) { + Intent intent = getIntent(); +// classifyResults = (ArrayList) intent.getSerializableExtra("LIST"); +// list = classifyResults.get(0).getFoodMaterial().getMenus(); + list= (ArrayList) intent.getSerializableExtra("LIST"); + adapter = new MaterialResultAdapter(list, MaterialResultActivity.this); + recyclerView.setAdapter(adapter); + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setLayoutManager(new LinearLayoutManager(MaterialResultActivity.this)); + } @@ -27,5 +63,15 @@ public class MaterialResultActivity extends BaseActivity { @Override public void onPointerCaptureChanged(boolean hasCapture) { + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // TODO: add setContentView(...) invocation + ButterKnife.bind(this); + + + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/historysearch/HistoryActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/historysearch/HistoryActivity.java new file mode 100644 index 0000000..5b554fb --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/historysearch/HistoryActivity.java @@ -0,0 +1,95 @@ +package com.example.ninefourone.nutritionmaster.modules.historysearch; + +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.HistoryAdapter; +import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.History; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; +import com.orhanobut.logger.Logger; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; + +import butterknife.BindView; +import butterknife.ButterKnife; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; + +public class HistoryActivity extends BaseActivity { + + + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + private ArrayList mList = new ArrayList<>(); + private HistoryAdapter adapter; + + + @Override + public int getLayoutId() { + return R.layout.activity_history; + } + + @Override + public void initViews(Bundle savedInstanceState) { + adapter = new HistoryAdapter(this, mList); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + recyclerView.setAdapter(adapter); + recyclerView.setNestedScrollingEnabled(false); + loadData(); + } + + @Override + public void initToolBar() { + + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + + } + + @Override + public void loadData() { + super.loadData(); + Logger.d(user.getUsername()); + getWebUtil().getEatenHistory(user.getUsername(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + History[] histories = new Gson().fromJson(json, History[].class); + Logger.d(Arrays.toString(histories)); + mList.clear(); + for (History temp: histories) { + + mList.add(temp); + } + + recyclerView.post(new Runnable() { + @Override + public void run() { + adapter.notifyDataSetChanged(); + } + }); + } + }); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // TODO: add setContentView(...) invocation + ButterKnife.bind(this); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/BodyInformationFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/BodyInformationFragment.java index d2c5146..e3785bd 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/BodyInformationFragment.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/BodyInformationFragment.java @@ -9,17 +9,21 @@ import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.RemoteException; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import android.widget.TextView; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.base.BaseFragment; +import com.example.ninefourone.nutritionmaster.bean.Element; import com.example.ninefourone.nutritionmaster.utils.ChartDrawer; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; +import com.orhanobut.logger.Logger; import com.today.step.lib.ISportStepInterface; import com.today.step.lib.TodayStepManager; import com.today.step.lib.TodayStepService; @@ -28,6 +32,7 @@ import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.OnClick; import butterknife.Unbinder; import me.itangqi.waveloadingview.WaveLoadingView; @@ -50,6 +55,8 @@ public class BodyInformationFragment extends BaseFragment { TextView calorieText; @BindView(R.id.weight_text) TextView weightText; + @BindView(R.id.see_whole_elements) + LinearLayout seeWholeElements; private int stepCount = 0; private static final int REFRESH_STEP_WHAT = 0; @@ -126,7 +133,17 @@ public class BodyInformationFragment extends BaseFragment { * 改变记步UI中的数字 */ private void updateStepCount() { - stepTextView.setText(stepCount + ""); + try { + stepTextView.setText(stepCount + ""); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @OnClick(R.id.see_whole_elements) + public void onViewClicked() { + AlertDialog dialog = new ElementDialog.Builder(getContext()).create(); + dialog.show(); } @@ -168,6 +185,7 @@ public class BodyInformationFragment extends BaseFragment { ArrayList weightPointValues = new ArrayList<>(); for (int i = 1; i < 15; i++) { int y = (int) (Math.random() * 20); + weightPointValues.add(new Entry(i, y)); } ChartDrawer.initSingleLineChart(weightLineChart, weightPointValues, "体重"); @@ -180,6 +198,14 @@ public class BodyInformationFragment extends BaseFragment { ChartDrawer.initSingleLineChart(stepLineChart, stepPointValues, "步数"); } + private int checkY(int y) { + if (y < 7) { + return checkY((int) (Math.random() * 10)); + } else { + return y; + } + } + @Override public void onDestroy() { super.onDestroy(); @@ -189,11 +215,33 @@ public class BodyInformationFragment extends BaseFragment { /** * 更新数据 */ - private void refreshUI() { + public void refreshUI() { if (NutritionMaster.user.getBmi() != -1) { - weightText.setText(NutritionMaster.user.getWeight()); + weightLineChart.setVisibility(View.VISIBLE); + stepLineChart.setVisibility(View.VISIBLE); + weightText.post(new Runnable() { + @Override + public void run() { + weightText.setText(NutritionMaster.user.getWeight() + ""); + } + }); + }else{ + stepLineChart.setVisibility(View.INVISIBLE); + weightLineChart.setVisibility(View.INVISIBLE); } -// waveLoadingView.setProgressValue(); + if (NutritionMaster.element != null) { + Logger.d(NutritionMaster.element); + try { + Element elementTemp = NutritionMaster.element.calculateData(NutritionMaster.user); + float temp = (float) (elementTemp.getCalorie() - NutritionMaster.user.getEaten_elements().getCalorie()); + calorieText.setText((int) temp + ""); + int progress = (int) (NutritionMaster.user.getEaten_elements().getCalorie() / elementTemp.getCalorie() * 100); + waveLoadingView.setProgressValue(progress); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + } @Override diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/ElementDialog.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/ElementDialog.java new file mode 100644 index 0000000..2bec8ba --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/bodyinformation/ElementDialog.java @@ -0,0 +1,128 @@ +package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.bodyinformation; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.app.AlertDialog; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.example.ninefourone.nutritionmaster.NutritionMaster; +import com.example.ninefourone.nutritionmaster.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by ScorpioMiku on 2018/10/8. + */ + +public class ElementDialog extends AlertDialog { + protected ElementDialog(@NonNull Context context) { + super(context); + } + + protected ElementDialog(@NonNull Context context, int themeResId) { + super(context, themeResId); + } + + protected ElementDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) { + super(context, cancelable, cancelListener); + } + + public static class Builder { + @BindView(R.id.calorie_tag) + TextView calorieTag; + @BindView(R.id.calorie_text) + TextView calorieText; + @BindView(R.id.suger_tag) + TextView sugerTag; + @BindView(R.id.suger_text) + TextView sugerText; + @BindView(R.id.fat_tag) + TextView fatTag; + @BindView(R.id.fat_text) + TextView fatText; + @BindView(R.id.protein_tag) + TextView proteinTag; + @BindView(R.id.protein_text) + TextView proteinText; + @BindView(R.id.cellulose_tag) + TextView celluloseTag; + @BindView(R.id.cellulose_text) + TextView celluloseText; + @BindView(R.id.vitamin_a_tag) + TextView vitaminATag; + @BindView(R.id.vitamin_a_text) + TextView vitaminAText; + @BindView(R.id.vitamin_b_1_tag) + TextView vitaminB1Tag; + @BindView(R.id.vitamin_b_1_text) + TextView vitaminB1Text; + @BindView(R.id.vitamin_b_2_tag) + TextView vitaminB2Tag; + @BindView(R.id.vitamin_b_2_text) + TextView vitaminB2Text; + @BindView(R.id.vitamin_b_6_tag) + TextView vitaminB6Tag; + @BindView(R.id.vitamin_b_6_text) + TextView vitaminB6Text; + @BindView(R.id.vitamin_c_tag) + TextView vitaminCTag; + @BindView(R.id.vitamin_c_text) + TextView vitaminCText; + @BindView(R.id.vitamin_e_tag) + TextView vitaminETag; + @BindView(R.id.vitamin_e_text) + TextView vitaminEText; + @BindView(R.id.carotene_tag) + TextView caroteneTag; + @BindView(R.id.carotene_text) + TextView caroteneText; + @BindView(R.id.cholesterol_tag) + TextView cholesterolTag; + @BindView(R.id.cholesterol_text) + TextView cholesterolText; + @BindView(R.id.ca_tag) + TextView caTag; + @BindView(R.id.ca_text) + TextView caText; + @BindView(R.id.na_tag) + TextView naTag; + @BindView(R.id.na_text) + TextView naText; + + private AlertDialog dialog; + + public Builder(Context context) { + + View view = LayoutInflater.from(context).inflate(R.layout.element_dialog, null); + dialog = new AlertDialog.Builder(context).setView(view).create(); + dialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + ButterKnife.bind(this, view); + calorieText.setText((int) (NutritionMaster.user.getEaten_elements().getCalorie()) + ""); + sugerText.setText((int) (NutritionMaster.user.getEaten_elements().getCarbohydrate()) + ""); + fatText.setText((int) (NutritionMaster.user.getEaten_elements().getFat()) + ""); + proteinText.setText((int) NutritionMaster.user.getEaten_elements().getProtein() + ""); + celluloseText.setText((int) NutritionMaster.user.getEaten_elements().getCellulose() + ""); + vitaminAText.setText((int) NutritionMaster.user.getEaten_elements().getVitaminA() + ""); + vitaminB1Text.setText((int) NutritionMaster.user.getEaten_elements().getVitaminB1() + ""); + vitaminB2Text.setText((int) NutritionMaster.user.getEaten_elements().getVitaminB2() + ""); + vitaminB6Text.setText((int) NutritionMaster.user.getEaten_elements().getVitaminB6() + ""); + vitaminCText.setText((int) NutritionMaster.user.getEaten_elements().getVitaminC() + ""); + vitaminEText.setText((int) NutritionMaster.user.getEaten_elements().getVitaminE() + ""); + caroteneText.setText((int) NutritionMaster.user.getEaten_elements().getCarotene() + ""); + cholesterolText.setText((int) NutritionMaster.user.getEaten_elements().getCholesterol() + ""); + caText.setText((int) NutritionMaster.user.getEaten_elements().getCa() + ""); + naText.setText((int) NutritionMaster.user.getEaten_elements().getNa() + ""); + + } + + public AlertDialog create() { + return dialog; + } + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationActivity.java index a8fb445..e6575d1 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationActivity.java @@ -1,21 +1,36 @@ package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.CustomizationAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.Element; import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.FoodMenuLight; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; +import com.google.gson.Gson; import com.orhanobut.logger.Logger; +import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; public class CustomizationActivity extends BaseActivity { @@ -43,11 +58,30 @@ public class CustomizationActivity extends BaseActivity { LinearLayout changeButton; @BindView(R.id.copy_button) LinearLayout copyButton; + @BindView(R.id.tool_bar_title) + TextView toolBarTitle; private ArrayList breakfastList = new ArrayList<>(); private ArrayList lunchList = new ArrayList<>(); private ArrayList dinnerList = new ArrayList<>(); + + private CustomizationAdapter breakfastAdapter; + private CustomizationAdapter lunchAdapter; + private CustomizationAdapter dinnerAdapter; + + private int start; + private String text; + + private int breakfastCalorie = 0; + private int lunchCalorie = 0; + private int dinnerCalorie = 0; + + private int suger = 0; + private int protein = 0; + private int fat = 0; + private int calorie = 0; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -61,9 +95,24 @@ public class CustomizationActivity extends BaseActivity { @Override public void initViews(Bundle savedInstanceState) { - loadData(); - String text = getIntent().getStringExtra("SEND_CODE"); + text = getIntent().getStringExtra("SEND_CODE"); Logger.d(text); + toolBarTitle.setText(text); + + breakfastAdapter = new CustomizationAdapter(breakfastList, this, 0); + dinnerAdapter = new CustomizationAdapter(dinnerList, this, 1); + lunchAdapter = new CustomizationAdapter(lunchList, this, 2); + + breakfastRecyclerView.setAdapter(breakfastAdapter); + dinnerRecyclerView.setAdapter(dinnerAdapter); + lunchRecyclerView.setAdapter(lunchAdapter); + + breakfastRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + dinnerRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + lunchRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + + loadData(); + refreshUI(); } @Override @@ -79,6 +128,128 @@ public class CustomizationActivity extends BaseActivity { @Override public void loadData() { super.loadData(); + breakfastList.clear(); + dinnerList.clear(); + lunchList.clear(); + final WebUtil webUtil = WebUtil.getInstance(); + webUtil.getMenusByElements(getElementLimit(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + FoodMenuLight[] foodMenus = new Gson().fromJson(json, FoodMenuLight[].class); + Logger.d(foodMenus.length); + if (foodMenus.length > 50) { + Random random = new Random(NutritionMaster.randomSeed + CalculateUtils.title2Int(text)); + start = random.nextInt(foodMenus.length - 50); + for (int i = start; i < start + 50; i++) { + webUtil.getMenu(foodMenus[i].getName(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + FoodMenu foodMenu = new Gson().fromJson(json, FoodMenu.class); + if (foodMenu.getIs_breakfast() == 1) { + if (breakfastList.size() < 1) { + breakfastList.add(foodMenu); + } + } else { + if (foodMenu.getName().contains("汤") || foodMenu.getName().contains("糕") + || foodMenu.getImage_url().equals("0") || foodMenu.getName().contains("汁") + || foodMenu.getName().contains("茶")) { + + } else { + if (lunchList.size() == 0) { + lunchList.add(foodMenu); + } else if (dinnerList.size() == 0) { + dinnerList.add(foodMenu); + } else if (lunchList.size() < 3) { + lunchList.add(foodMenu); + } else if (dinnerList.size() < 3) { + dinnerList.add(foodMenu); + } + } + } + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + lunchRecyclerView.post(new Runnable() { + @Override + public void run() { + breakfastAdapter.notifyDataSetChanged(); + dinnerAdapter.notifyDataSetChanged(); + lunchAdapter.notifyDataSetChanged(); + } + }); + } + }); + thread.start(); + } + }); + } + } else { + Random random = new Random(NutritionMaster.randomSeed + CalculateUtils.title2Int(text)); + start = random.nextInt(foodMenus.length); + for (int i = start; i < start + 12; i++) { + webUtil.getMenu(foodMenus[i].getName(), new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + FoodMenu foodMenu = new Gson().fromJson(json, FoodMenu.class); + if (foodMenu.getIs_breakfast() == 1) { + if (breakfastList.size() < 1) { + breakfastList.add(foodMenu); + } + } else { + if (foodMenu.getName().contains("汤") || foodMenu.getName().contains("糕") + || foodMenu.getImage_url().equals("0") || foodMenu.getName().contains("汁") + || foodMenu.getName().contains("茶")) { + + } else { + if (lunchList.size() == 0) { + lunchList.add(foodMenu); + } else if (dinnerList.size() == 0) { + dinnerList.add(foodMenu); + } else if (lunchList.size() < 3) { + lunchList.add(foodMenu); + } else if (dinnerList.size() < 3) { + dinnerList.add(foodMenu); + } + } + } + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + lunchRecyclerView.post(new Runnable() { + @Override + public void run() { + breakfastAdapter.notifyDataSetChanged(); + dinnerAdapter.notifyDataSetChanged(); + lunchAdapter.notifyDataSetChanged(); + } + }); + } + }); + thread.start(); + } + }); + } + } + } + }); } @@ -86,9 +257,79 @@ public class CustomizationActivity extends BaseActivity { public void onViewClicked(View view) { switch (view.getId()) { case R.id.change_button: + NutritionMaster.randomSeed = CalculateUtils.getSecond(); + loadData(); break; case R.id.copy_button: break; } } + + private Map getElementLimit() { + Map params = new HashMap<>(); + try { + Element calculated = NutritionMaster.element.calculateData(NutritionMaster.user); + params.put("calorie", (calculated.getCalorie() - NutritionMaster.user.getEaten_elements().getCalorie()) / 4); + params.put("fat", (calculated.getFat() - NutritionMaster.user.getEaten_elements().getFat()) / 4); + + +// Logger.d((calculated.getCalorie() - NutritionMaster.user.getEaten_elements().getCalorie())); +// Logger.d(calculated.getFat() - NutritionMaster.user.getEaten_elements().getFat()); +// Logger.d((calculated.getCarbohydrate() - NutritionMaster.user.getEaten_elements().getCarbohydrate())); +// Logger.d(calculated.getProtein() - NutritionMaster.user.getEaten_elements().getProtein()); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return params; + } + + /** + * 加载元素总量 + */ + public void refreshUI() { +// Logger.d(flag); +// if (flag == 0) { +// breakfastCalorie += calorie; +// breakfastEnergyText.setText((int) breakfastCalorie + "千卡"); +// } else if (flag == 1) { +// lunchCalorie += calorie; +// lunchEnergyText.setText(lunchCalorie + "千卡"); +// } else { +// dinnerCalorie += calorie; +// dinnerEnergyText.setText(dinnerCalorie + "千卡"); +// } +// calorieText.setText(breakfastCalorie + lunchCalorie + dinnerCalorie + ""); +// this.suger += suger; +// this.fat += fat; +// this.protein = protein; +// sugerText.setText(this.suger + ""); +// fatText.setText(this.fat + ""); +// proteinText.setText(this.protein + ""); + try { + Element element = NutritionMaster.element.calculateData(NutritionMaster.user); + suger = (int) (element.getCarbohydrate() - NutritionMaster.user.getEaten_elements().getCarbohydrate()); + sugerText.setText(suger + ""); + fat = (int) (element.getFat() - NutritionMaster.user.getEaten_elements().getFat()); + fatText.setText(fat + ""); + calorie = (int) (element.getCalorie() - NutritionMaster.user.getEaten_elements().getCalorie()); + calorieText.setText(calorie + ""); + protein = (int) (element.getProtein() - NutritionMaster.user.getEaten_elements().getProtein()); + proteinText.setText(protein + ""); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + + + } + + /** + * 添加到饮食记录 + */ + private void addRecord() { + for (int i = 0; i < breakfastList.size(); i++) { + + } + } + + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java index 88d4bf9..540625c 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java @@ -17,6 +17,7 @@ import com.example.ninefourone.nutritionmaster.cardconfig.CardItemTouchCallBack; import com.example.ninefourone.nutritionmaster.cardconfig.SwipeCardLayoutManager; import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; +import com.orhanobut.logger.Logger; import java.util.ArrayList; @@ -82,10 +83,11 @@ public class CustomizationFragment extends BaseFragment { protected void loadData() { super.loadData(); for (int i = CalculateUtils.getWeek(); i <= 7; i++) { +// Logger.d(CalculateUtils.getWeek()); // mDataList.add("周" + ConstantUtils.arab2Chinese(i) + "美食普"); DailyCard dailyCard = new DailyCard( - "周" + ConstantUtils.arab2Chinese(i) + "美食普", - ConstantUtils.dailyDescibes[i-1], + "周" + ConstantUtils.arab2Chinese(i) + "美食谱", + ConstantUtils.dailyDescibes[i - 1], picList[i - 1] ); mDataList.add(dailyCard); @@ -93,8 +95,8 @@ public class CustomizationFragment extends BaseFragment { for (int i = 1; i < CalculateUtils.getWeek(); i++) { // mDataList.add("周" + ConstantUtils.arab2Chinese(i) + "美食普"); DailyCard dailyCard = new DailyCard( - "周" + ConstantUtils.arab2Chinese(i) + "美食普", - ConstantUtils.dailyDescibes[i-1], + "周" + ConstantUtils.arab2Chinese(i) + "美食谱", + ConstantUtils.dailyDescibes[i - 1], picList[i - 1] ); mDataList.add(dailyCard); diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/recommend/RecommendFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/recommend/RecommendFragment.java index e6b1e88..1a6b04b 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/recommend/RecommendFragment.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/recommend/RecommendFragment.java @@ -9,14 +9,19 @@ import android.view.View; import android.view.ViewGroup; import com.chad.library.adapter.base.BaseQuickAdapter; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.RecommendAdapter; import com.example.ninefourone.nutritionmaster.base.BaseFragment; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import com.example.ninefourone.nutritionmaster.bean.RecommendFood; +import com.example.ninefourone.nutritionmaster.bean.Trick; +import com.google.gson.Gson; import com.orhanobut.logger.Logger; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import android.view.LayoutInflater; @@ -39,7 +44,7 @@ public class RecommendFragment extends BaseFragment { private RecommendAdapter adapter; private ArrayList datas = new ArrayList<>(); private GridLayoutManager manager; - private int[] indexs = new int[]{0, 1, 1, 2}; + private int[] indexs = new int[]{0, 1, 2}; @Override @@ -49,8 +54,8 @@ public class RecommendFragment extends BaseFragment { @Override public void initView(Bundle state) { - loadData(); initRecyclerView(); + loadData(); } @@ -108,8 +113,7 @@ public class RecommendFragment extends BaseFragment { if (position == 0) { return 2; } else { - if (adapter.getItemViewType(position) == RecommendFood.TYPE_BIG || - adapter.getItemViewType(position) == RecommendFood.TYPE_DETAIL) { + if (adapter.getItemViewType(position) == RecommendFood.TYPE_DETAIL) { // Logger.d(manager.getSpanCount()); return 2; } else { @@ -129,23 +133,127 @@ public class RecommendFragment extends BaseFragment { @Override protected void loadData() { super.loadData(); - for (int i = 0; i < 11; i++) { - int flag = indexs[i % 4]; - RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", flag); - datas.add(recommendFood); - } +// if (NutritionMaster.user.getOccupation_name().equals("")) { + getWebUtil().getRandomMenus(20, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + FoodMenu[] menus = new Gson().fromJson(json, FoodMenu[].class); + int count = 0; + for (int i = 0; i < menus.length; i++) { + if (count > 11) { + break; + } else { + int flag = indexs[count % 3]; + RecommendFood recommendFood = new RecommendFood(menus[i], flag); + if (!recommendFood.getPicture().equals("0")) { + datas.add(recommendFood); + count++; + } + } + } + + /** + * 获取小知识 + */ + getWebUtil().getRandomTricks(5, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + Trick[] tricks = new Gson().fromJson(json, Trick[].class); + int index = 0; + for (int i = 0; i < datas.size(); i++) { + if (datas.get(i).getItemType() == RecommendFood.TYPE_DETAIL) { + datas.get(i).setDescription(tricks[index].getContent()); + datas.get(i).setTitle(tricks[index].getTitle()); + index++; + } + } + recyclerView.post(new Runnable() { + @Override + public void run() { + adapter.notifyDataSetChanged(); + } + }); + } + }); + } + }); + } /** * 加载新数据 */ private void addData() { - for (int i = 0; i < 7; i++) { - int flag = indexs[i % 4]; - RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", flag); - adapter.getData().add(recommendFood); - } - adapter.loadMoreComplete(); +// if (NutritionMaster.user.getOccupation_name().equals("")) { + getWebUtil().getRandomMenus(20, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + final int originsize = datas.size(); + String json = response.body().string(); + FoodMenu[] menus = new Gson().fromJson(json, FoodMenu[].class); + int count = 0; + for (int i = 0; i < menus.length; i++) { + if (count > 7) { + break; + } else { + int flag = indexs[count % 3]; + RecommendFood recommendFood = new RecommendFood(menus[i], flag); + if (!recommendFood.getPicture().equals("0")) { + datas.add(recommendFood); + count++; + } + } + } + + /** + * 获取小知识 + */ + getWebUtil().getRandomTricks(5, new Callback() { + @Override + public void onFailure(Call call, IOException e) { + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + String json = response.body().string(); + Trick[] tricks = new Gson().fromJson(json, Trick[].class); + int index = 0; + for (int i = originsize; i < datas.size(); i++) { + if (datas.get(i).getItemType() == RecommendFood.TYPE_DETAIL) { + datas.get(i).setDescription(tricks[index].getContent()); + datas.get(i).setTitle(tricks[index].getTitle()); + index++; + } + } + recyclerView.post(new Runnable() { + @Override + public void run() { + adapter.loadMoreComplete(); + } + }); + } + }); + } + }); +// } } /** diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java index f947147..f9b37bf 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java @@ -1,11 +1,19 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.Element; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; +import com.example.ninefourone.nutritionmaster.bean.Illness; import com.example.ninefourone.nutritionmaster.bean.MyUser; +import com.example.ninefourone.nutritionmaster.bean.Occupation; +import com.example.ninefourone.nutritionmaster.bean.Physique; import com.orhanobut.logger.Logger; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.HashMap; /** * Created by ScorpioMiku on 2018/8/29. @@ -73,7 +81,43 @@ public class CalculateUtils { public static int getWeek() { Calendar calendar = Calendar.getInstance(); // Logger.d( calendar.get(Calendar.DAY_OF_WEEK)); - return calendar.get(Calendar.DAY_OF_WEEK) - 1; +// calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; +// Logger.d(week); + if (week == 0) { + return 7; + } + return week; + } + + public static int title2Int(String text) { + String temp = text.substring(1, 2); + Logger.d(temp); + if (temp.equals("一")) { + return 1; + } else if (temp.equals("二")) { + return 2; + } else if (temp.equals("三")) { + return 3; + } else if (temp.equals("四")) { + return 4; + } else if (temp.equals("五")) { + return 5; + } else if (temp.equals("六")) { + return 6; + } else { + return 7; + } + } + + /** + * 获得秒 + * + * @return + */ + public static int getSecond() { + Calendar c = Calendar.getInstance(); + return c.get(Calendar.SECOND); } /** @@ -129,4 +173,88 @@ public class CalculateUtils { } return classifyResultArrayList; } + + /** + * 元素比例 + * + * @param elementsBean + * @return + */ + public static HashMap elementsProportion(FoodMenu.ElementsBean elementsBean) { + HashMap map = new HashMap<>(); + Double suger = elementsBean.getCarbohydrate(); + Double fat = elementsBean.getFat(); + Double protein = elementsBean.getProtein(); + Double sum = fat + suger + protein; + suger = suger / sum * 100; + fat = fat / sum * 100; + protein = protein / sum * 100; + map.put("suger", suger.intValue()); + map.put("fat", fat.intValue()); + map.put("protein", protein.intValue()); +// Logger.d(elementsBean); +// Logger.d(map.toString()); + return map; + } + + /** + * 将步骤字符串分解 + * + * @param whole + * @return + */ + public static ArrayList getStepArray(String whole) { + ArrayList list = new ArrayList<>(); + String[] array = whole.split("'"); + for (int i = 0; i < array.length; i++) { + if (array[i].equals("[") || array[i].equals("]") || array[i].equals(", ") || + array[i].equals(",") || array[i].equals(" ")) { + + } else { + list.add(array[i]); + } + } + return list; + } + + /** + * 计算元素需求 + * + * @return + */ + public static Element getElementsByOccupationAndPhysique(MyUser user, Occupation occupation, Physique physique) { + Element userElement = new Element(user); + Element occupationElement = new Element(occupation.getElements()); + Element physiqueElement = new Element(physique.getElements()); + physiqueElement.add(occupationElement, 2); + userElement.add(physiqueElement, -1); + return userElement; + } + + public static Element getElementsByOccupation(MyUser user, Occupation occupation) { + Element userElement = new Element(user); + Element occupationElement = new Element(occupation.getElements()); + userElement.add(occupationElement, -1); + return userElement; + } + + public static Element getElementsByPhysique(MyUser user, Physique physique) { + Element userElement = new Element(user); + Element physiqueElement = new Element(physique.getElements()); + userElement.add(physiqueElement, -1); + return userElement; + } + + public static Element getElementsAddIllness(Illness illness, MyUser user, Occupation occupation, Physique physique) { + Element userElement = new Element(user); + Element occupationElement = new Element(occupation.getElements()); + Element illnessElement = new Element(occupation.getElements()); + Element physiqueElement = new Element(physique.getElements()); + physiqueElement.add(occupationElement, 2); + physiqueElement.add(illnessElement, 1); + userElement.add(physiqueElement, -1); + return userElement; + } + + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ChartDrawer.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ChartDrawer.java index b8eab0e..4f7ee16 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ChartDrawer.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ChartDrawer.java @@ -137,7 +137,7 @@ public class ChartDrawer { //设置竖线为虚线样式 // xAxis.enableGridDashedLine(10f, 10f, 0f); //设置x轴标签数 - xAxis.setLabelCount(8,false); + xAxis.setLabelCount(8, false); xAxis.setTextSize(5); //图表第一个和最后一个label数据不超出左边和右边的Y轴 // xAxis.setAvoidFirstLastClipping(true); @@ -147,7 +147,7 @@ public class ChartDrawer { //准备好每个点对应的x轴数值 List list = new ArrayList<>(); for (int i = 0; i < pointValues.size(); i++) { - list.add(String.valueOf(i+1).concat("号")); + list.add(String.valueOf(i + 1).concat("号")); } xAxis.setValueFormatter(new IndexAxisValueFormatter(list)); @@ -158,7 +158,8 @@ public class ChartDrawer { rightAxis.setEnabled(false); YAxis leftAxis = mLineChart.getAxisLeft(); leftAxis.setEnabled(false); - leftAxis.setDrawAxisLine(false); + leftAxis.setDrawAxisLine(true); + rightAxis.setAxisMinimum(0); //点构成的某条线 LineDataSet lineDataSet = new LineDataSet(pointValues, "体重"); diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java index 2823d52..131d0c5 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java @@ -26,7 +26,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; @@ -47,32 +46,17 @@ public class WebUtil { } /** - * 获取具体的菜谱信息 - * { - * "flavor": "咸鲜味", - * "calorie": 234, - * "name": "雪丽对虾", - * "technology": "炸", - * "image_url": "http://s1.ig.meishij.net/p/20091012/fed63858e633540c8df73e62692520fb_150x150.jpg", - * "cook_quantity": [ - * { - * "menu": "雪丽对虾", - * "quantity": "500", - * "material": "对虾" - * }, - * { - * "menu": "雪丽对虾", - * "quantity": "60", - * "material": "鸡蛋清" - * }, - * } + * 获取具体的菜谱信息 { "flavor": "咸鲜味", "calorie": 234, "name": "雪丽对虾", "technology": + * "炸", "image_url": + * "http://s1.ig.meishij.net/p/20091012/fed63858e633540c8df73e62692520fb_150x150.jpg", + * "cook_quantity": [ { "menu": "雪丽对虾", "quantity": "500", "material": "对虾" }, { + * "menu": "雪丽对虾", "quantity": "60", "material": "鸡蛋清" }, } */ 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数组 * @@ -80,7 +64,21 @@ public class WebUtil { * @param callback */ public void getRandomMenus(int count, Callback callback) { - Request request = new Request.Builder().url("http://120.77.182.38/menus/get_random_menus/?count=" + String.valueOf(count)).build(); + Request request = new Request.Builder() + .url("http://120.77.182.38/menus/get_random_menus/?count=" + String.valueOf(count)).build(); + mClient.newCall(request).enqueue(callback); + } + + /** + * 获取count个随机菜谱,在回调中解析为一个Menu数组 根据用户的体质,病理,职业推荐 + * + * @param count + * @param callback + */ + public void getRandomMenus(int count, String username, Callback callback) { + Request request = new Request.Builder().url( + "http://120.77.182.38/menus/get_random_menus/?count=" + String.valueOf(count) + "&username=" + username) + .build(); mClient.newCall(request).enqueue(callback); } @@ -91,30 +89,15 @@ public class WebUtil { * @param callback */ public void getRandomTricks(int count, Callback callback) { - Request request = new Request.Builder().url("http://120.77.182.38/trick/get_random_tricks/?count=" + String.valueOf(count)).build(); + Request request = new Request.Builder() + .url("http://120.77.182.38/trick/get_random_tricks/?count=" + String.valueOf(count)).build(); mClient.newCall(request).enqueue(callback); } - /** - * 获取某食材可以做的菜 - * [ - * { - * "menu": "西红柿鸡蛋汤", - * "quantity": "适量", - * "material": "西红柿" - * }, - * { - * "menu": "瘦身版红菜汤", - * "quantity": "4-5片", - * "material": "西红柿" - * }, - * { - * "menu": "西红柿炖豆腐", - * "quantity": "三个", - * "material": "西红柿" - * }, - * ] + * 获取某食材可以做的菜 [ { "menu": "西红柿鸡蛋汤", "quantity": "适量", "material": "西红柿" }, { + * "menu": "瘦身版红菜汤", "quantity": "4-5片", "material": "西红柿" }, { "menu": + * "西红柿炖豆腐", "quantity": "三个", "material": "西红柿" }, ] * * @param materialName * @param callback @@ -125,65 +108,33 @@ public class WebUtil { } /** - * 获取某菜谱分类对应的菜 - * { - * "classification": "川菜", - * "cure_occupation": [], - * "menu_effect": [ - * "三色鲍脯", - * "三色鸡酪", - * "三菇冬瓜汤", - * "三菌烩蛇段", - * "三鲜乌鱼汤", - * "三鲜参片汤", - * "三鲜猪肝汤", - * "下饭的素版麻婆豆腐", - * "丝瓜鱼肚卷", - * "五更豆酥鱼", - * "元鱼烧鸡", - * "冬苋菜豆腐汤", - * "冬菜排骨汤", + * 获取某菜谱分类对应的菜 { "classification": "川菜", "cure_occupation": [], "menu_effect": [ + * "三色鲍脯", "三色鸡酪", "三菇冬瓜汤", "三菌烩蛇段", "三鲜乌鱼汤", "三鲜参片汤", "三鲜猪肝汤", "下饭的素版麻婆豆腐", + * "丝瓜鱼肚卷", "五更豆酥鱼", "元鱼烧鸡", "冬苋菜豆腐汤", "冬菜排骨汤", */ public void getMenuClassification(String classificationName, Callback callback) { - Request request = new Request.Builder().url("http://120.77.182.38/menuclassification/" + classificationName + "/").build(); + Request request = new Request.Builder() + .url("http://120.77.182.38/menuclassification/" + classificationName + "/").build(); mClient.newCall(request).enqueue(callback); } /** - * 获取职业需要的菜谱分类 - * { - * "occupation_name": "电力工程师", - * "menuclassification_set": [ - * "接触电离辐射人员食谱", - * "防癌抗癌食谱", - * "明目食谱", - * "关节炎食谱", - * "壮腰健肾食谱" - * ] - * } + * 获取职业需要的菜谱分类 { "occupation_name": "电力工程师", "menuclassification_set": [ + * "接触电离辐射人员食谱", "防癌抗癌食谱", "明目食谱", "关节炎食谱", "壮腰健肾食谱" ] } */ 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); - } - public static void getAllOccupations(Callback callback) { - OkHttpClient mClient = new OkHttpClient(); - Request request = new Request.Builder().url("http://120.77.182.38/occupation/").build(); + Request request = null; + if (occupationName == null) { + request = new Request.Builder().url("http://120.77.182.38/occupation/").build(); + } else { + request = new Request.Builder().url("http://120.77.182.38/occupation/" + occupationName + "/").build(); + } mClient.newCall(request).enqueue(callback); } + /** - * 获取体质需要的食材 - * { - * "physical_name": "气虚质", - * "cure_material": [ - * "人参", - * "人参须", - * "去芯莲子", - * "去芯莲子(3~4人份)", - * "土茯苓", - * ... - * ] - * } + * 获取体质需要的食材 { "physical_name": "气虚质", "cure_material": [ "人参", "人参须", "去芯莲子", + * "去芯莲子(3~4人份)", "土茯苓", ... ] } */ public void getPhysique(String physiqueName, Callback callback) { Request request = new Request.Builder().url("http://120.77.182.38/physique/" + physiqueName + "/").build(); @@ -191,30 +142,21 @@ public class WebUtil { } /** - * 获取病相关的菜谱和元素信息 - * 传入含有病的意义的菜谱分类名称,比如青少年食谱 + * 获取病相关的菜谱和元素信息 传入含有病的意义的菜谱分类名称,比如青少年食谱 *

- * { - * "menu_classification": { - * "classification": "青少年食谱", - * "cure_occupation": [ - * "学生" - * ], - * "menu_effect": [ - * "三鲜鳝汤", - * "上海糖醋小排骨", - * ... - * ] - * }, - * "elements": { - * "id": 84, - * "calorie": 1.1, - * ... - * } - * } + * { "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(); + Request request = new Request.Builder().url("http://120.77.182.38/illness/" + illnessClassification + "/") + .build(); + mClient.newCall(request).enqueue(callback); + } + + public static void getAllOccupations(Callback callback) { + OkHttpClient mClient = new OkHttpClient(); + Request request = new Request.Builder().url("http://120.77.182.38/occupation/").build(); mClient.newCall(request).enqueue(callback); } @@ -224,103 +166,125 @@ public class WebUtil { mClient.newCall(request).enqueue(callback); } + public static String HttpPost(String requestUrl, String accessToken, String params) throws Exception { + System.out.println(params); + String generalUrl = ""; + generalUrl = requestUrl + "?access_token=" + accessToken; + System.out.println("发送的连接为:" + generalUrl); + URL url = new URL(generalUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + System.out.println("打开链接,开始发送请求" + new Date().getTime() / 1000); + connection.setRequestMethod("POST"); + // 设置通用的请求属性 + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Connection", "Keep-Alive"); + connection.setUseCaches(false); + connection.setDoOutput(true); + connection.setDoInput(true); + + // 得到请求的输出流对象 + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.writeBytes(params); + out.flush(); + out.close(); + + // 建立实际的连接 + connection.connect(); + // 获取所有响应头字段 + Map> headers = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : headers.keySet()) { + System.out.println(key + "--->" + headers.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = null; + if (requestUrl.contains("nlp")) + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK")); + else + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + String result = ""; + String getLine; + while ((getLine = in.readLine()) != null) { + result += getLine; + } + in.close(); + System.out.println("请求结束" + new Date().getTime() / 1000); + System.out.println("result:" + result); + return result; + } + /** * 注意在回调中处理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) - .add("password", password) - .add("sex", sex) - .add("occupation_name", occupationName == null ? "" : occupationName) - .add("physical_name", physicalName == null ? "" : physicalName) - .build(); - Request request = new Request.Builder() - .url("http://120.77.182.38/myuser/") - .post(formBody) - .build(); + * 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) .add("password", password) .add("sex", sex) .add("occupation_name", + * occupationName == null ? "" : occupationName) .add("physical_name", + * physicalName == null ? "" : physicalName) .build(); Request request = new + * Request.Builder() .url("http://120.77.182.38/myuser/") .post(formBody) + * .build(); + * + * OkHttpClient mClient = new OkHttpClient(); + * mClient.newCall(request).enqueue(callback); } + */ - OkHttpClient mClient = new OkHttpClient(); - mClient.newCall(request).enqueue(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) - .add("password", password) - .build(); - - Request request = new Request.Builder() - .url(url) - .patch(formBody) - .build(); - - OkHttpClient mClient = new OkHttpClient(); - mClient.newCall(request).enqueue(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("occupation", occupation) - .build(); - - Request request = new Request.Builder() - .url(url) - .patch(formBody) - .build(); - - OkHttpClient mClient = new OkHttpClient(); - mClient.newCall(request).enqueue(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("physique", physique) - .build(); - - Request request = new Request.Builder() - .url(url) - .patch(formBody) - .build(); - - OkHttpClient mClient = new OkHttpClient(); - mClient.newCall(request).enqueue(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) + * .add("password", password) .build(); + * + * Request request = new Request.Builder() .url(url) .patch(formBody) .build(); + * + * OkHttpClient mClient = new OkHttpClient(); + * mClient.newCall(request).enqueue(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("occupation", occupation) .build(); + * + * Request request = new Request.Builder() .url(url) .patch(formBody) .build(); + * + * OkHttpClient mClient = new OkHttpClient(); + * mClient.newCall(request).enqueue(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("physique", physique) .build(); + * + * Request request = new Request.Builder() .url(url) .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 + "/"; + * 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(); + * 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(); + * Request request = new Request.Builder() .url(url) .patch(formBody) .build(); *

* OkHttpClient mClient = new OkHttpClient(); - * mClient.newCall(request).enqueue(callback); - * } + * mClient.newCall(request).enqueue(callback); } */ private static RequestBody buildUserRequestBody(MyUser user) { try { @@ -331,9 +295,9 @@ public class WebUtil { for (Field f : fields) { String fieldName = f.toString().substring(f.toString().lastIndexOf(".") + 1); f.setAccessible(true); - Object object = f.get(user);//获取属性的值 + Object object = f.get(user);// 获取属性的值 if (object != null) { - //illness属性是一个list,需要加入每个list的值,而不是list对象 + // illness属性是一个list,需要加入每个list的值,而不是list对象 if (fieldName.equals("illness")) { List illnessList = (List) object; for (String ill : illnessList) { @@ -346,12 +310,12 @@ public class WebUtil { } } RequestBody formBody = builder.build(); -// for (int i = 0; i < ((FormBody) formBody).size(); i++) { -// System.out.println(((FormBody) formBody).name(i) + " : " + ((FormBody) formBody).value(i)); -// } + // 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) { @@ -368,10 +332,7 @@ public class WebUtil { 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(); + Request request = new Request.Builder().url(url).post(formBody).build(); mClient.newCall(request).enqueue(callback); } @@ -384,31 +345,26 @@ public class WebUtil { 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(); + Request request = new Request.Builder().url(url).patch(formBody).build(); mClient.newCall(request).enqueue(callback); } /** - * 用户吃了一个菜,更新用户本周已吃摄入的营养元素的量 - * 返回当前user的最新信息,用MyUser类解析json - * - * @param username - * @param menuName + * 用户吃了一个菜,更新用户本周已吃摄入的营养元素的量 传入这顿饭摄入的营养量 返回当前user的最新信息,用MyUser类解析json */ - public void eatenMenu(String username, String menuName, Callback callback) { + public void eatenElements(String username, Map elements, 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(); + FormBody.Builder builder = new FormBody.Builder(); + // 构造RequestBody参数 + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + double value = entry.getValue(); + builder.add(key, String.valueOf(value)); + } + builder.add("username", username); + RequestBody formBody = builder.build(); + Request request = new Request.Builder().url(url).post(formBody).build(); mClient.newCall(request).enqueue(callback); } @@ -420,17 +376,14 @@ public class WebUtil { public void getMenusByElements(Map elements, Callback callback) { String url = "http://120.77.182.38/menus/get_menus_by_elements/"; FormBody.Builder builder = new FormBody.Builder(); - //构造RequestBody参数 + // 构造RequestBody参数 for (Map.Entry entry : elements.entrySet()) { String key = entry.getKey(); double value = entry.getValue(); builder.add(key, String.valueOf(value)); } RequestBody formBody = builder.build(); - Request request = new Request.Builder() - .url(url) - .post(formBody) - .build(); + Request request = new Request.Builder().url(url).post(formBody).build(); mClient.newCall(request).enqueue(callback); } // @@ -482,52 +435,29 @@ public class WebUtil { // return result; // } - public static String HttpPost(String requestUrl, String accessToken, String params) throws Exception { - System.out.println(params); - String generalUrl = ""; - generalUrl = requestUrl + "?access_token=" + accessToken; - System.out.println("发送的连接为:" + generalUrl); - URL url = new URL(generalUrl); - // 打开和URL之间的连接 - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - System.out.println("打开链接,开始发送请求" + new Date().getTime() / 1000); - connection.setRequestMethod("POST"); - // 设置通用的请求属性 - connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestProperty("Connection", "Keep-Alive"); - connection.setUseCaches(false); - connection.setDoOutput(true); - connection.setDoInput(true); + public void addEatenHistory(String username, String menuName, Callback callback) { + String url = "http://120.77.182.38/myuser/add_eaten_history/"; + RequestBody formBody = new FormBody.Builder().add("username", username).add("menu", menuName).build(); + Request request = new Request.Builder().url(url).post(formBody).build(); + mClient.newCall(request).enqueue(callback); + } - // 得到请求的输出流对象 - DataOutputStream out = new DataOutputStream(connection.getOutputStream()); - out.writeBytes(params); - out.flush(); - out.close(); + public void getEatenHistory(String username, Callback callback) { + String url = "http://120.77.182.38/myuser/get_eaten_history?username=" + username; + Request request = new Request.Builder().url(url).build(); + mClient.newCall(request).enqueue(callback); + } - // 建立实际的连接 - connection.connect(); - // 获取所有响应头字段 - Map> headers = connection.getHeaderFields(); - // 遍历所有的响应头字段 - for (String key : headers.keySet()) { - System.out.println(key + "--->" + headers.get(key)); + public void getMenusByMaterials(List materialList, Callback callback) { + // POST + String url = "http://120.77.182.38/menus/get_menus_by_materials/"; + FormBody.Builder builder = new FormBody.Builder(); + for (String material : materialList) { + builder.add("material", material); } - // 定义 BufferedReader输入流来读取URL的响应 - BufferedReader in = null; - if (requestUrl.contains("nlp")) - in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK")); - else - in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); - String result = ""; - String getLine; - while ((getLine = in.readLine()) != null) { - result += getLine; - } - in.close(); - System.out.println("请求结束" + new Date().getTime() / 1000); - System.out.println("result:" + result); - return result; + RequestBody formBody = builder.build(); + Request request = new Request.Builder().url(url).post(formBody).build(); + mClient.newCall(request).enqueue(callback); } public static void main(String[] args) { Map params = new HashMap<>(); @@ -543,13 +473,14 @@ public class WebUtil { public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); System.out.println(json); - //轻量级的Menu,只有Menu的名字,卡路里,元素对象的主码id.想获取详细信息可以用getMenu方法获取 - //这样是为了查询更快 + // 轻量级的Menu,只有Menu的名字,卡路里,元素对象的主码id.想获取详细信息可以用getMenu方法获取 + // 这样是为了查询更快 FoodMenuLight[] foodMenuLights = new Gson().fromJson(json, FoodMenuLight[].class); System.out.println(Arrays.toString(foodMenuLights)); } }); +<<<<<<< HEAD /* MyUser testUser = new MyUser(); @@ -726,6 +657,8 @@ public class WebUtil { } });*/ +======= +>>>>>>> develop /* * MyUser testUser = new MyUser(); testUser.setUsername("test6"); * testUser.setPassword("66666"); testUser.setAge(8); testUser.setHeight(175); @@ -806,7 +739,10 @@ public class WebUtil { * } }); */ +<<<<<<< HEAD +======= +>>>>>>> develop /* * WebUtil.getFoodMaterial("西红柿", new Callback() { * @@ -881,6 +817,9 @@ public class WebUtil { * @Override public void onResponse(Call call, Response response) throws * IOException { System.out.println(response.body().string()); } }); */ +<<<<<<< HEAD +======= +>>>>>>> develop } } diff --git a/app/src/main/res/drawable/body_bg.png b/app/src/main/res/drawable/body_bg.png index ded6ac3..91fa8db 100644 Binary files a/app/src/main/res/drawable/body_bg.png and b/app/src/main/res/drawable/body_bg.png differ diff --git a/app/src/main/res/drawable/ic_add_recipe.xml b/app/src/main/res/drawable/ic_add_recipe.xml new file mode 100644 index 0000000..3b209e7 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_recipe.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_ill_add_button.xml b/app/src/main/res/drawable/ic_ill_add_button.xml new file mode 100644 index 0000000..7fce1dd --- /dev/null +++ b/app/src/main/res/drawable/ic_ill_add_button.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_customization.xml b/app/src/main/res/layout/activity_customization.xml index 89e5af6..d570e29 100644 --- a/app/src/main/res/layout/activity_customization.xml +++ b/app/src/main/res/layout/activity_customization.xml @@ -8,6 +8,26 @@ tools:context="com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization.CustomizationActivity"> + + + + + + + @@ -51,15 +71,16 @@ + android:layout_height="80dp" + android:layout_marginBottom="10dp" + android:background="#f4f2f2" + android:paddingTop="5dp"> @@ -87,15 +108,16 @@ + android:layout_height="230dp" + android:layout_marginBottom="10dp" + android:background="#f4f2f2" + android:paddingTop="5dp"> @@ -123,8 +145,10 @@ + android:layout_height="230dp" + android:layout_marginBottom="10dp" + android:background="#f4f2f2" + android:paddingTop="5dp"> diff --git a/app/src/main/res/layout/activity_history.xml b/app/src/main/res/layout/activity_history.xml new file mode 100644 index 0000000..24bc0b5 --- /dev/null +++ b/app/src/main/res/layout/activity_history.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cbeed1b..fa8c3ed 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -110,6 +110,7 @@ android:layout_alignParentRight="true" app:bmb_buttonEnum="ham" app:bmb_buttonPlaceEnum="buttonPlace_ham_2" + app:bmb_normalColor="#8cbc79" app:bmb_piecePlaceEnum="piecePlace_ham_2" /> @@ -177,6 +178,8 @@ + + + + + + - - - - diff --git a/app/src/main/res/layout/activity_material_result.xml b/app/src/main/res/layout/activity_material_result.xml index 04dda61..c86ba87 100644 --- a/app/src/main/res/layout/activity_material_result.xml +++ b/app/src/main/res/layout/activity_material_result.xml @@ -10,6 +10,7 @@ diff --git a/app/src/main/res/layout/activity_recipe.xml b/app/src/main/res/layout/activity_recipe.xml index 478ded1..26f9aaa 100644 --- a/app/src/main/res/layout/activity_recipe.xml +++ b/app/src/main/res/layout/activity_recipe.xml @@ -1,5 +1,5 @@ - - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="250dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - - - - - - - - - - - - + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + - + android:layout_width="match_parent" + android:layout_height="100dp" /> + - + - + - + - - - - - - - - - - - + diff --git a/app/src/main/res/layout/body_information_fragment.xml b/app/src/main/res/layout/body_information_fragment.xml index d6cea8f..862eedf 100644 --- a/app/src/main/res/layout/body_information_fragment.xml +++ b/app/src/main/res/layout/body_information_fragment.xml @@ -149,6 +149,7 @@ android:src="@drawable/ic_infor_weight" /> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/customization_item.xml b/app/src/main/res/layout/customization_item.xml index 7a79ed8..2feeed9 100644 --- a/app/src/main/res/layout/customization_item.xml +++ b/app/src/main/res/layout/customization_item.xml @@ -4,10 +4,11 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="70dp" - android:layout_margin="5dp" + android:layout_margin="2dp" app:cardCornerRadius="15dp"> @@ -68,6 +69,7 @@ android:layout_height="wrap_content" android:layout_marginRight="5dp" android:layout_toLeftOf="@id/arch" + android:gravity="center_vertical" android:textSize="11sp" tools:text="365千卡" /> diff --git a/app/src/main/res/layout/element_dialog.xml b/app/src/main/res/layout/element_dialog.xml new file mode 100644 index 0000000..2912f3e --- /dev/null +++ b/app/src/main/res/layout/element_dialog.xml @@ -0,0 +1,413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/make_step_item.xml b/app/src/main/res/layout/make_step_item.xml index 8dcf491..2daeaeb 100644 --- a/app/src/main/res/layout/make_step_item.xml +++ b/app/src/main/res/layout/make_step_item.xml @@ -3,14 +3,17 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="#f9f9f6" + android:gravity="center_vertical" android:orientation="vertical"> diff --git a/app/src/main/res/layout/material_item.xml b/app/src/main/res/layout/material_item.xml index 3aa6b56..95e8810 100644 --- a/app/src/main/res/layout/material_item.xml +++ b/app/src/main/res/layout/material_item.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="50dp" + android:background="#f9f9f6" android:gravity="center_vertical"> diff --git a/app/src/main/res/layout/material_result_item.xml b/app/src/main/res/layout/material_result_item.xml new file mode 100644 index 0000000..684cdcb --- /dev/null +++ b/app/src/main/res/layout/material_result_item.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/recommend_item_big.xml b/app/src/main/res/layout/recommend_item_big.xml deleted file mode 100644 index 98203a4..0000000 --- a/app/src/main/res/layout/recommend_item_big.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/recommend_item_detail.xml b/app/src/main/res/layout/recommend_item_detail.xml index abad286..c305e5b 100644 --- a/app/src/main/res/layout/recommend_item_detail.xml +++ b/app/src/main/res/layout/recommend_item_detail.xml @@ -11,9 +11,9 @@ + app:cardCornerRadius="20dp" + app:cardElevation="0dp"> + + android:paddingBottom="5dp" + android:paddingLeft="15dp" + android:paddingRight="15dp" + android:paddingTop="5dp"> + android:gravity="center_horizontal" + android:text="小知识" + android:textSize="12sp" + android:textStyle="bold" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/recommend_item_middle.xml b/app/src/main/res/layout/recommend_item_middle.xml index d68c316..55cf6ff 100644 --- a/app/src/main/res/layout/recommend_item_middle.xml +++ b/app/src/main/res/layout/recommend_item_middle.xml @@ -27,7 +27,7 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 65fe929..d48a02a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ 食材识别 菜品识别 登录 + 是否添加到已吃记录 Email diff --git a/datas/早中晚餐.rar b/datas/早中晚餐.rar new file mode 100644 index 0000000..2bbb25a Binary files /dev/null and b/datas/早中晚餐.rar differ diff --git a/文档.md b/文档.md new file mode 100644 index 0000000..ac6c2f1 --- /dev/null +++ b/文档.md @@ -0,0 +1,3 @@ +我们用Django框架来编写服务器后台逻辑,我们收集的数据集包含的大量数据经过我们筛选、补充缺失、规整化后有序存储到Mysql数据库,可以方便地进行安全验证后的增删改查。我们使用django-rest-framework框架,实现了前后端分离,把数据库映射对象序列化后构造为json字符串和安卓端进行交互,有效降低了代码的耦合性,项目维护和更新更加方便。服务器利用Nginx和uWSGI实现HTTP重定向,可以在高并发下实现负载均衡,承受万数量级以上的并发量。 + +安全性方面,我们使用跨站点请求伪造(CSRF)方法保护数据库不受恶意的CSRF攻击,通过在每个POST请求中检查一个随机数来确保恶意用户无法简单地通过发送表单POST请求影响数据库。另外,在发送包含用户的隐私数据时(比如密码或者身高体重等信息),我们使用PBKDF2和SHA256算法对数据先加密后才存储到数据库,保证用户的隐私数据不会泄露。 \ No newline at end of file diff --git a/服务器文档.md b/服务器文档.md new file mode 100644 index 0000000..ac6c2f1 --- /dev/null +++ b/服务器文档.md @@ -0,0 +1,3 @@ +我们用Django框架来编写服务器后台逻辑,我们收集的数据集包含的大量数据经过我们筛选、补充缺失、规整化后有序存储到Mysql数据库,可以方便地进行安全验证后的增删改查。我们使用django-rest-framework框架,实现了前后端分离,把数据库映射对象序列化后构造为json字符串和安卓端进行交互,有效降低了代码的耦合性,项目维护和更新更加方便。服务器利用Nginx和uWSGI实现HTTP重定向,可以在高并发下实现负载均衡,承受万数量级以上的并发量。 + +安全性方面,我们使用跨站点请求伪造(CSRF)方法保护数据库不受恶意的CSRF攻击,通过在每个POST请求中检查一个随机数来确保恶意用户无法简单地通过发送表单POST请求影响数据库。另外,在发送包含用户的隐私数据时(比如密码或者身高体重等信息),我们使用PBKDF2和SHA256算法对数据先加密后才存储到数据库,保证用户的隐私数据不会泄露。 \ No newline at end of file