diff --git a/README.md b/README.md index c22d2e4..a8ca9fe 100644 --- a/README.md +++ b/README.md @@ -263,6 +263,6 @@ * POST新建用户信息`params`示例 * 1♂ 0♀ - * `occupation_name`,`physique`的值必须和数据库对应 + * `occupation_name`,`physical_name`的值必须和数据库对应 ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvjbfh6vm1j30r70eh3zj.jpg) diff --git a/app/build.gradle b/app/build.gradle index ce04b2a..8af0acf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,4 +83,7 @@ dependencies { // json解析库 implementation 'com.google.code.gson:gson:2.8.5' + //横向picker + compile 'com.github.adityagohad:HorizontalPicker:1.0.1' + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3055424..3b6865a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + - - + + + + + \ 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 67edc29..24a86e6 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java @@ -4,16 +4,25 @@ import android.app.Activity; import android.app.Application; import android.os.Bundle; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import com.example.ninefourone.nutritionmaster.bean.MyUser; import com.example.ninefourone.nutritionmaster.bean.Occupation; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; -import com.example.ninefourone.nutritionmaster.utils.WebUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.google.gson.Gson; import com.orhanobut.logger.AndroidLogAdapter; import com.orhanobut.logger.Logger; +import org.json.JSONObject; + +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; import okhttp3.Call; import okhttp3.Callback; @@ -35,7 +44,6 @@ public class NutritionMaster extends Application { super.onCreate(); mInstance = this; init(); - initUser(); } /** @@ -80,6 +88,15 @@ public class NutritionMaster extends Application { } }); initOccupations(); + initUser(); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + initBD(); + } + }); + thread.start(); + } public static NutritionMaster getInstance() { @@ -109,7 +126,7 @@ public class NutritionMaster extends Application { */ private void initOccupations() { - WebUtils.getAllOccupations(new Callback() { + WebUtil.getAllOccupations(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); @@ -118,7 +135,6 @@ public class NutritionMaster extends Application { @Override public void onResponse(Call call, Response response) throws IOException { Occupation[] occupations = new Gson().fromJson(response.body().string(), Occupation[].class); -// Logger.d(Arrays.toString(occupations)); for (int i = 0; i < occupations.length; i++) { ConstantUtils.occupationList.add(occupations[i].getOccupation_name()); } @@ -128,4 +144,58 @@ public class NutritionMaster extends Application { } + /** + * BDAPI init + */ + private void initBD() { + ConstantUtils.BD_ACCESS_TOKEN = getAccessToken(); +// Logger.d(ConstantUtils.BD_ACCESS_TOKEN); + } + + + private String getAccessToken() { + String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; + String ak = ConstantUtils.BD_API_KEY; + String sk = ConstantUtils.BD_SECRET_KEY; + String getAccessTokenUrl = authHost + // 1. grant_type为固定参数 + + "grant_type=client_credentials" + // 2. 官网获取的 API Key + + "&client_id=" + ak + // 3. 官网获取的 Secret Key + + "&client_secret=" + sk; + try { + URL realUrl = new URL(getAccessTokenUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.err.println(key + "--->" + map.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String result = ""; + String line; + while ((line = in.readLine()) != null) { + result += line; + } + /** + * 返回结果示例 + */ +// System.err.println("result:" + result); + JSONObject jsonObject = new JSONObject(result); + String access_token = jsonObject.getString("access_token"); +// Logger.d(access_token); + return access_token; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.java new file mode 100644 index 0000000..defeb3f --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.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 java.util.ArrayList; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class PickerAdapter extends RecyclerView.Adapter { + private ArrayList list; + private Context context; + + public PickerAdapter(ArrayList list, Context context) { + super(); + this.list = list; + this.context = context; + } + + @Override + public PickerHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.picker_item, parent, false); + return new PickerHolder(view); + } + + @Override + public void onBindViewHolder(PickerHolder holder, int position) { + holder.bindView(list.get(position)); + } + + @Override + public int getItemCount() { + return list.size(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java new file mode 100644 index 0000000..2d06438 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java @@ -0,0 +1,28 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +import com.example.ninefourone.nutritionmaster.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class PickerHolder extends RecyclerView.ViewHolder { + @BindView(R.id.picker_item) + TextView pickerItem; + + public PickerHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void bindView(String text) { + pickerItem.setText(text); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java new file mode 100644 index 0000000..b4cf8b1 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java @@ -0,0 +1,51 @@ +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.NutritionMaster; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; + +import java.util.ArrayList; + +import travel.ithaka.android.horizontalpickerlib.PickerLayoutManager; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultListAdapter extends RecyclerView.Adapter { + private ArrayList mList; + private Context context; + private PickerLayoutManager pickerLayoutManager; + + public ResultListAdapter(ArrayList list, Context context) { + super(); + mList = list; + this.context = context; + mList = CalculateUtils.getDishQuantity(mList, NutritionMaster.user); + } + + @Override + public ResultListHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.dish_result_item, parent, false); + pickerLayoutManager = new PickerLayoutManager(context, PickerLayoutManager.HORIZONTAL, false); + return new ResultListHolder(view); + } + + @Override + public void onBindViewHolder(ResultListHolder holder, int position) { + holder.bindView(mList.get(position), pickerLayoutManager, (DishResultActivity) context, position); + } + + @Override + public int getItemCount() { + return mList.size(); + } +} 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 new file mode 100644 index 0000000..b5c578a --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java @@ -0,0 +1,71 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.LinearSnapHelper; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.SnapHelper; +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.ClassifyResult; +import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity; +import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; +import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.github.siyamed.shapeimageview.CircularImageView; + +import butterknife.BindView; +import butterknife.ButterKnife; +import travel.ithaka.android.horizontalpickerlib.PickerLayoutManager; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultListHolder extends RecyclerView.ViewHolder { + @BindView(R.id.image) + ImageView image; + @BindView(R.id.name) + TextView name; + @BindView(R.id.picker) + RecyclerView picker; + + private PickerAdapter pickerAdapter; + private Context context; + + public ResultListHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + context = itemView.getContext(); + } + + public void bindView(ClassifyResult classifyResult, PickerLayoutManager pickerLayoutManager, + final DishResultActivity dishResultActivity,final int position) { + pickerLayoutManager.setChangeAlpha(true); + pickerLayoutManager.setScaleDownBy(0.99f); + pickerLayoutManager.setScaleDownDistance(0.8f); + picker.setLayoutManager(pickerLayoutManager); + SnapHelper snapHelper = new LinearSnapHelper(); + snapHelper.attachToRecyclerView(picker); + pickerAdapter = new PickerAdapter(ConstantUtils.dishPicerData, context); + picker.setAdapter(pickerAdapter); + picker.setNestedScrollingEnabled(false); + picker.scrollToPosition(48); + picker.smoothScrollBy(10, 0); + + pickerLayoutManager.setOnScrollStopListener(new PickerLayoutManager.onScrollStopListener() { + @Override + public void selectedView(View view) { + String text = ((TextView) view).getText().toString(); +// MessageUtils.MakeToast(text); + dishResultActivity.refreshData(Integer.valueOf(text),position); + } + }); + + + name.setText(classifyResult.getName()); + Glide.with(context).load("http://s2.boohee.cn/house/food_big/big_photo20155149534910631.jpg").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 614d9e1..c86a8c3 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 @@ -6,6 +6,7 @@ import android.support.v7.app.AppCompatActivity; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.bean.MyUser; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.orhanobut.logger.Logger; import butterknife.ButterKnife; @@ -18,6 +19,7 @@ import butterknife.Unbinder; public abstract class BaseActivity extends AppCompatActivity { private Unbinder unbinder; protected MyUser user; + private WebUtil webUtil; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -26,10 +28,13 @@ public abstract class BaseActivity extends AppCompatActivity { setContentView(getLayoutId()); unbinder = ButterKnife.bind(this); initViews(savedInstanceState); + webUtil = new WebUtil(); initToolBar(); - } + public WebUtil getWebUtil() { + return webUtil; + } /** * 设置布局layout @@ -94,7 +99,7 @@ public abstract class BaseActivity extends AppCompatActivity { protected void upUser() { NutritionMaster.user = user; - Logger.d("用户信息已改"+NutritionMaster.user.toString()); + 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 fb21713..5b30d8f 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 @@ -11,6 +11,7 @@ import android.view.ViewGroup; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.bean.MyUser; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.orhanobut.logger.Logger; import butterknife.ButterKnife; @@ -27,6 +28,8 @@ public abstract class BaseFragment extends Fragment { protected boolean isPrepared; protected boolean isVisible; private Unbinder unbinder; + private WebUtil webUtil; + public abstract @LayoutRes @@ -44,10 +47,15 @@ public abstract class BaseFragment extends Fragment { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); initView(savedInstanceState); + webUtil = new WebUtil(); this.user = NutritionMaster.user; } + public WebUtil getWebUtil() { + return webUtil; + } + /** * 初始化自己的ui * @@ -157,7 +165,7 @@ public abstract class BaseFragment extends Fragment { protected void upUser() { NutritionMaster.user = user; - Logger.d("用户信息已改"+NutritionMaster.user.toString()); + Logger.d("用户信息已改" + NutritionMaster.user.toString()); } } 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 new file mode 100644 index 0000000..93ec75c --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java @@ -0,0 +1,107 @@ +package com.example.ninefourone.nutritionmaster.bean; + +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 okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; + +/** + * Created by ScorpioMiku on 2018/10/4. + */ + +public class ClassifyResult implements Serializable { + + private String imgPath; + private double probability; + private String name; + private double calorie; + private Boolean has_calorie; + private double quantity = -1; + private FoodMenu foodMenu; + + + public void getMenu() { + WebUtil webUtil = new WebUtil(); + webUtil.getMenu("素红烧肉", new Callback() { + @Override + public void onFailure(Call call, IOException e) { + name = "-1"; + Logger.e("我们数据库没有这个菜"); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + FoodMenu menu = new Gson().fromJson(response.body().string(), FoodMenu.class); + foodMenu = menu; + Logger.d(name + "|" + menu); + } + }); + } + + public FoodMenu getFoodMenu() { + return foodMenu; + } + + public void setFoodMenu(FoodMenu foodMenu) { + this.foodMenu = foodMenu; + } + + public double getQuantity() { + return quantity; + } + + public void setQuantity(double quantity) { + this.quantity = quantity; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public double getProbability() { + return probability; + } + + public void setProbability(double probability) { + this.probability = probability; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getCalorie() { + return calorie; + } + + public void setCalorie(double calorie) { + this.calorie = calorie; + } + + public Boolean getHas_calorie() { + return has_calorie; + } + + public void setHas_calorie(Boolean has_calorie) { + this.has_calorie = has_calorie; + } + + @Override + public String toString() { + return name + ";置信度" + probability + ";卡路里" + calorie; + } +} 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 46aaf55..b8e243f 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 @@ -1,9 +1,9 @@ package com.example.ninefourone.nutritionmaster.bean; +import java.io.Serializable; import java.util.List; -public class FoodMenu { - +public class FoodMenu implements Serializable { /** * flavor : 五香味 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 2043ab3..8cd6815 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 @@ -52,6 +52,11 @@ public class MyUser { private List user_permissions; private List illness; + public MyUser() { + height = new Integer(0); + occupation_name = ""; + } + @Override public String toString() { return "MyUser{" + @@ -80,11 +85,11 @@ public class MyUser { '}'; } - public int getId() { + public Integer getId() { return id; } - public void setId(int id) { + public void setId(Integer id) { this.id = id; } @@ -120,11 +125,11 @@ public class MyUser { this.last_login = last_login; } - public boolean isIs_superuser() { + public Boolean getIs_superuser() { return is_superuser; } - public void setIs_superuser(boolean is_superuser) { + public void setIs_superuser(Boolean is_superuser) { this.is_superuser = is_superuser; } @@ -160,19 +165,19 @@ public class MyUser { this.email = email; } - public boolean isIs_staff() { + public Boolean getIs_staff() { return is_staff; } - public void setIs_staff(boolean is_staff) { + public void setIs_staff(Boolean is_staff) { this.is_staff = is_staff; } - public boolean isIs_active() { + public Boolean getIs_active() { return is_active; } - public void setIs_active(boolean is_active) { + public void setIs_active(Boolean is_active) { this.is_active = is_active; } @@ -184,43 +189,43 @@ public class MyUser { this.date_joined = date_joined; } - public int getSex() { + public Integer getSex() { return sex; } - public void setSex(int sex) { + public void setSex(Integer sex) { this.sex = sex; } - public int getAge() { + public Integer getAge() { return age; } - public void setAge(int age) { + public void setAge(Integer age) { this.age = age; } - public int getHeight() { + public Integer getHeight() { return height; } - public void setHeight(int height) { + public void setHeight(Integer height) { this.height = height; } - public int getWeight() { + public Integer getWeight() { return weight; } - public void setWeight(int weight) { + public void setWeight(Integer weight) { this.weight = weight; } - public int getBmi() { + public Integer getBmi() { return bmi; } - public void setBmi(int bmi) { + public void setBmi(Integer bmi) { this.bmi = bmi; } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java new file mode 100644 index 0000000..b4650dd --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java @@ -0,0 +1,39 @@ +package com.example.ninefourone.nutritionmaster.bean; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultList implements Serializable { + + private ArrayList results; + + public ResultList(ArrayList results) { + super(); + this.results = results; + } + + public ArrayList getResults() { + return results; + } + + public void setResults(ArrayList results) { + this.results = results; + } + + /** + * 用于Intent传递 + */ + + @Override + public String toString() { + String log = ""; + for (int i = 0; i < results.size(); i++) { + log += results.get(i).getName() + ";卡路里" +results.get(i).getCalorie() + "\n"; + } + return log; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/FoodMaterialCamera.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java similarity index 56% rename from app/src/main/java/com/example/ninefourone/nutritionmaster/camera/FoodMaterialCamera.java rename to app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java index 0c15f16..dcbe994 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/FoodMaterialCamera.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java @@ -2,12 +2,13 @@ package com.example.ninefourone.nutritionmaster.camera; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.hardware.Camera; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; -import android.view.Display; +import android.util.Base64; import android.view.Surface; import android.view.View; import android.view.Window; @@ -17,9 +18,20 @@ import android.widget.ImageView; import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity; +import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; +import com.example.ninefourone.nutritionmaster.utils.WebUtil; import com.orhanobut.logger.Logger; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -28,7 +40,11 @@ import butterknife.OnClick; * Created by ScorpioMiku on 2018/9/3. */ -public class FoodMaterialCamera extends AppCompatActivity { +public class ClassifierCamera extends AppCompatActivity { + + public static int MATERAIL_CODE = 0; + public static int DISH_CODE = 1; + @BindView(R.id.camera_preview) FrameLayout mCameraLayout; @BindView(R.id.results_text_view) @@ -37,20 +53,22 @@ public class FoodMaterialCamera extends AppCompatActivity { ImageView moreTakePhotoButtonCapture; @BindView(R.id.more_takephoto_ok) ImageView moreTakephotoOk; - @BindView(R.id.more_camera_cover_linearlayout) - FrameLayout moreCameraCoverLinearlayout; + @BindView(R.id.camera_cover_linearlayout) + FrameLayout cameraCoverLinearlayout; private Camera mCamera; private CameraPreview mPreview; private int mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; - private int widthPixel; - private float heightPixel; + private ArrayList resultList = new ArrayList<>(); + + private int code = -1; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + Intent intent = getIntent(); + code = intent.getIntExtra("CODE", -1); //取消toolbar requestWindowFeature(Window.FEATURE_NO_TITLE); //设置全屏 @@ -59,9 +77,6 @@ public class FoodMaterialCamera extends AppCompatActivity { //注意:上面两个设置必须写在setContentView前面 setContentView(R.layout.cameras_layout); ButterKnife.bind(this); - Display display = getWindowManager().getDefaultDisplay(); - widthPixel = display.getWidth(); - heightPixel = display.getHeight() * (14.0f / 16); if (!checkCameraHardware(this)) { MessageUtils.MakeToast("不支持相机"); @@ -101,13 +116,6 @@ public class FoodMaterialCamera extends AppCompatActivity { if (null == mCamera) { mCamera = getCameraInstance(); mPreview = new CameraPreview(this, mCamera); -// mPreview.setOnTouchListener(new View.OnTouchListener() { -// @Override -// public boolean onTouch(View v, MotionEvent event) { -// mCamera.autoFocus(null); -// return false; -// } -// }); mCameraLayout.addView(mPreview); mCamera.startPreview(); } @@ -124,8 +132,10 @@ public class FoodMaterialCamera extends AppCompatActivity { c = Camera.open(); Camera.Parameters mParameters = c.getParameters(); - Logger.d(widthPixel+", "+heightPixel); - mParameters.setPictureSize(widthPixel, (int) heightPixel); + List sizes = mParameters.getSupportedPreviewSizes(); + + mParameters.setPictureSize(2048, 1536); + mParameters.setPreviewSize(2048, 1536); c.setParameters(mParameters); } catch (Exception e) { e.printStackTrace(); @@ -152,7 +162,46 @@ public class FoodMaterialCamera extends AppCompatActivity { private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(final byte[] data, Camera camera) { - MessageUtils.MakeToast("拍照!"); + try { + String imgStr = Base64.encodeToString(data, Base64.DEFAULT); + String imgParam = URLEncoder.encode(imgStr, "UTF-8"); + final String param = "image=" + imgParam + "&top_num=" + 1; + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + String result = null; + try { + if (code == 0) { + result = WebUtil.HttpPost(ConstantUtils.BD_DISH_URL, + ConstantUtils.BD_ACCESS_TOKEN, param); + } else if (code == 1) { + result = WebUtil.HttpPost(ConstantUtils.BD_DISH_URL, + ConstantUtils.BD_ACCESS_TOKEN, param); + } else { + Logger.e("拍照code为-1"); + } + JSONObject jsonObject = new JSONObject(result); + ClassifyResult classifyResult = new ClassifyResult(); + JSONArray resultObject = jsonObject.getJSONArray("result"); + jsonObject = resultObject.getJSONObject(0); + classifyResult.setCalorie(jsonObject.getInt("calorie")); + classifyResult.setHas_calorie(jsonObject.getBoolean("has_calorie")); + classifyResult.setProbability(jsonObject.getDouble("probability")); + classifyResult.setName(jsonObject.getString("name")); + classifyResult.getMenu(); +// Logger.d(classifyResult); + resultList.add(classifyResult); + refreshUI(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } catch (Exception e) { + e.printStackTrace(); + } +// MessageUtils.MakeToast("拍照!"); mCamera.startPreview(); } }; @@ -168,8 +217,16 @@ public class FoodMaterialCamera extends AppCompatActivity { switch (view.getId()) { case R.id.more_take_photo_button_capture: mCamera.autoFocus(mAutoFocusCallback); + cameraCoverLinearlayout.setVisibility(View.VISIBLE); break; case R.id.more_takephoto_ok: + Intent intent = new Intent(ClassifierCamera.this, DishResultActivity.class); + intent.putExtra("LIST", resultList); +// intent.putExtra("LIST", ConstantUtils.testData); + startActivity(intent); + resultList.clear(); + refreshUI(); + finish(); break; } } @@ -209,4 +266,19 @@ public class FoodMaterialCamera extends AppCompatActivity { } camera.setDisplayOrientation(result); } + + + private void refreshUI() { + resultsTextView.post(new Runnable() { + @Override + public void run() { + String text = ""; + for (int i = 0; i < resultList.size(); i++) { + text += resultList.get(i).getName() + " "; + } + resultsTextView.setText(text); + cameraCoverLinearlayout.setVisibility(View.INVISIBLE); + } + }); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java index 6fd06c0..0f26040 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java @@ -211,11 +211,11 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { */ @Override public float getSwipeEscapeVelocity(float defaultValue) { - Log.d(TAG, "getSwipeEscapeVelocity: " + defaultValue); - View topView = mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1); - if (isUpOrDown(topView)) { //如果是向上或者向下滑动 - return Float.MAX_VALUE; //就返回阈值为很大 - } +// Log.d(TAG, "getSwipeEscapeVelocity: " + defaultValue); +// View topView = mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1); +// if (isUpOrDown(topView)) { //如果是向上或者向下滑动 +// return Float.MAX_VALUE; //就返回阈值为很大 +// } return super.getSwipeEscapeVelocity(defaultValue); } 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 2ee2ccd..9ff6cac 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 @@ -19,13 +19,12 @@ import android.widget.TextView; import com.ToxicBakery.viewpager.transforms.CubeOutTransformer; import com.akexorcist.roundcornerprogressbar.RoundCornerProgressBar; -import com.bumptech.glide.Glide; import com.cb.ratingbar.CBRatingBar; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.HomePagerAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; -import com.example.ninefourone.nutritionmaster.camera.FoodMaterialCamera; +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.information.InformationActivity; @@ -316,14 +315,24 @@ public class MainActivity extends BaseActivity { @Override public void onBoomButtonClick(int index) { Intent cameraIntent = new Intent(MainActivity.this, - FoodMaterialCamera.class); + ClassifierCamera.class); + cameraIntent.putExtra("CODE", ClassifierCamera.MATERAIL_CODE); startActivity(cameraIntent); } }); boomMenuButton.addBuilder(builder); HamButton.Builder builder2 = new HamButton.Builder() .normalImageRes(R.drawable.foods) - .normalTextRes(R.string.food_title); + .normalTextRes(R.string.food_title) + .listener(new OnBMClickListener() { + @Override + public void onBoomButtonClick(int index) { + Intent cameraIntent = new Intent(MainActivity.this, + ClassifierCamera.class); + cameraIntent.putExtra("CODE", ClassifierCamera.DISH_CODE); + startActivity(cameraIntent); + } + }); boomMenuButton.addBuilder(builder2); } @@ -332,7 +341,7 @@ public class MainActivity extends BaseActivity { * 初始化个人信息界面(UI) */ private void initInforView() { -// Logger.d(NutritionMaster.user.toString()); + adderInfor.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); if (NutritionMaster.user.getHeight() != 0) { showInformation.setVisibility(View.VISIBLE); 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 dc112fe..b1fc259 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 @@ -15,6 +15,7 @@ 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.modules.MainActivity; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; @@ -148,14 +149,14 @@ public class AddInformationActivity extends BaseActivity { public void onClick(View v) { if (ageTextView.getText().toString().equals("年龄") || weightTextView.getText().toString().equals("体重") - || sexTextView.getText().toString().equals("性别") || heightTextView.getText().toString().equals("身高")|| + || sexTextView.getText().toString().equals("性别") || heightTextView.getText().toString().equals("身高") || occupationTextView.getText().toString().equals("职业")) { MessageUtils.MakeToast("请点击图片填写所有信息"); } else { user.setHeight(Integer.valueOf(heightTextView.getText().toString().split("c")[0])); user.setWeight(Integer.valueOf(weightTextView.getText().toString().split("k")[0])); user.setAge(Integer.valueOf(ageTextView.getText().toString().split("岁")[0])); - user.setSex(sexTextView.getText().toString()); + user.setSex(CalculateUtils.sex2int(sexTextView.getText().toString())); user.setOccupation_name(occupationTextView.getText().toString()); upUser(); MessageUtils.MakeToast("信息填写成功"); 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 cb99a0b..948a867 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 @@ -390,7 +390,7 @@ public class AddPhysiqueActivity extends BaseActivity { phy.setMentality(ConstantUtils.physiquesMentalitys[maxIndex]); phy.setMatters(ConstantUtils.physiquesMatters[maxIndex]); phy.setImageUrl(ConstantUtils.physiquesImageUrls[maxIndex]); - user.setPhysique(phy); + user.setPhysical_name(physique); upUser(); loadInformation(phy); 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 new file mode 100644 index 0000000..7a9a3f6 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java @@ -0,0 +1,100 @@ +package com.example.ninefourone.nutritionmaster.modules.classifyresult; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.widget.Button; +import android.widget.TextView; + +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 java.util.ArrayList; +import java.util.Arrays; + +import butterknife.BindView; + +public class DishResultActivity extends BaseActivity { + + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + @BindView(R.id.calorie) + TextView calorie; + @BindView(R.id.suger) + TextView suger; + @BindView(R.id.fat) + TextView fat; + @BindView(R.id.protein) + TextView protein; + @BindView(R.id.ok_button) + Button okButton; + + + private ArrayList results; + private ResultListAdapter resultListAdapter; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public int getLayoutId() { + return R.layout.activity_dish_result; + } + + @Override + 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)); + } + + @Override + public void initToolBar() { + + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + + } + + /** + * 能量根据选择的来变 + * + * @param quantity + */ + public void refreshData(int quantity, int positon) { + float calorieSum = 0; + float fatSum = 0; + float sugarSum = 0; + float proteinSum = 0; + ClassifyResult temp = results.get(positon); + temp.setQuantity(quantity); + results.set(positon, temp); + for (int i = 0; i < results.size(); i++) { + calorieSum += results.get(i).getCalorie() * results.get(i).getQuantity() / 100; + fatSum += results.get(i).getCalorie() * results.get(i).getQuantity() / 100; + calorieSum += results.get(i).getCalorie() * results.get(i).getQuantity() / 100; + calorieSum += results.get(i).getCalorie() * results.get(i).getQuantity() / 100; + } + calorie.setText((int)calorieSum + ""); + protein.setText((int)proteinSum + ""); + fat.setText((int)fatSum + ""); + suger.setText((int)sugarSum + ""); + } + +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/information/InformationActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/information/InformationActivity.java index 021a437..a0c7de7 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/information/InformationActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/information/InformationActivity.java @@ -1,15 +1,32 @@ package com.example.ninefourone.nutritionmaster.modules.information; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.ImageView; +import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + public class InformationActivity extends AppCompatActivity { + @BindView(R.id.back_button) + ImageView backButton; + @BindView(R.id.title_text) + TextView titleText; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_information); + ButterKnife.bind(this); + } + + @OnClick(R.id.back_button) + public void onViewClicked() { + finish(); } } 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 4791a8a..a8fb445 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,18 +1,52 @@ package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.LinearLayout; import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.FoodMenu; import com.orhanobut.logger.Logger; +import java.util.ArrayList; + import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.OnClick; public class CustomizationActivity extends BaseActivity { + @BindView(R.id.breakfast_energy_text) + TextView breakfastEnergyText; + @BindView(R.id.breakfast_recycler_view) + RecyclerView breakfastRecyclerView; + @BindView(R.id.lunch_energy_text) + TextView lunchEnergyText; + @BindView(R.id.lunch_recycler_view) + RecyclerView lunchRecyclerView; + @BindView(R.id.dinner_energy_text) + TextView dinnerEnergyText; + @BindView(R.id.dinner_recycler_view) + RecyclerView dinnerRecyclerView; + @BindView(R.id.calorie_text) + TextView calorieText; + @BindView(R.id.fat_text) + TextView fatText; + @BindView(R.id.suger_text) + TextView sugerText; + @BindView(R.id.protein_text) + TextView proteinText; + @BindView(R.id.change_button) + LinearLayout changeButton; + @BindView(R.id.copy_button) + LinearLayout copyButton; + + private ArrayList breakfastList = new ArrayList<>(); + private ArrayList lunchList = new ArrayList<>(); + private ArrayList dinnerList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -27,6 +61,7 @@ public class CustomizationActivity extends BaseActivity { @Override public void initViews(Bundle savedInstanceState) { + loadData(); String text = getIntent().getStringExtra("SEND_CODE"); Logger.d(text); } @@ -40,4 +75,20 @@ public class CustomizationActivity extends BaseActivity { public void onPointerCaptureChanged(boolean hasCapture) { } + + @Override + public void loadData() { + super.loadData(); + + } + + @OnClick({R.id.change_button, R.id.copy_button}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.change_button: + break; + case R.id.copy_button: + break; + } + } } 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 301f33e..44c10b9 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 @@ -15,6 +15,7 @@ import com.example.ninefourone.nutritionmaster.base.BaseFragment; import com.example.ninefourone.nutritionmaster.bean.RecommendFood; import com.orhanobut.logger.Logger; +import java.io.IOException; import java.util.ArrayList; import android.view.LayoutInflater; @@ -22,6 +23,9 @@ import android.view.LayoutInflater; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; /** * Created by ScorpioMiku on 2018/8/26. @@ -84,20 +88,12 @@ public class RecommendFragment extends BaseFragment { recyclerView.postDelayed(new Runnable() { @Override public void run() { - - Logger.d("加载数据"); - for (int i = 0; i < 6; i++) { - RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", indexs[i % 4]); - adapter.getData().add(recommendFood); - } - adapter.loadMoreComplete(); -// Logger.d("开始加载"); + addData(); } }, 1000); } }, recyclerView); -// adapter.disableLoadMoreIfNotFullPage(); adapter.setEnableLoadMore(true); adapter.setHeaderView(LayoutInflater.from(getContext()). inflate(R.layout.recommend_head, (ViewGroup) recyclerView.getParent(), false)); @@ -126,17 +122,42 @@ public class RecommendFragment extends BaseFragment { } /** - * 加载数据 + * 初始化数据 + * 病 、 体质 、 职业 + * 0-4 5-7 8-10 */ @Override protected void loadData() { super.loadData(); for (int i = 0; i < 11; i++) { - RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", indexs[i % 4]); + int flag = indexs[i % 4]; + RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", flag); datas.add(recommendFood); +// if (flag == 2) { +// +// } else { +// +// } } } + /** + * 加载新数据 + */ + private void addData() { +// Logger.d("加载数据"); + for (int i = 0; i < 7; i++) { + int flag = indexs[i % 4]; + if (flag == 2) { + + } else { + RecommendFood recommendFood = new RecommendFood(1, "烧肉", "好吃", flag); + adapter.getData().add(recommendFood); + } + } + 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 a17fe70..89bf5ac 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,7 +1,10 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.MyUser; import com.orhanobut.logger.Logger; +import java.util.ArrayList; import java.util.Calendar; /** @@ -69,7 +72,47 @@ 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; +// Logger.d( calendar.get(Calendar.DAY_OF_WEEK)); + return calendar.get(Calendar.DAY_OF_WEEK) - 1; + } + + /** + * 性别转数字 + * @param sex + * @return + */ + public static int sex2int(String sex) { + if (sex.equals("男")) { + return 1; + } else if (sex.equals("女")) { + return 0; + } else { + Logger.e("不男不女"); + return 1; + } + } + + /** + * 计算每个食物吃多少 + * + * @param classifyResultArrayList + * @param user + * @return + */ + + public static ArrayList getDishQuantity( + ArrayList classifyResultArrayList, MyUser user) { + double calorieSum = 0; + double[] calories = new double[classifyResultArrayList.size()]; + double[] quantitys = new double[classifyResultArrayList.size()]; + float baseQuantity = 600f; + for (int i = 0; i < classifyResultArrayList.size(); i++) { + calorieSum += classifyResultArrayList.get(i).getCalorie(); + calories[i] = classifyResultArrayList.get(i).getCalorie(); + } + for (int i = 0; i < classifyResultArrayList.size(); i++) { + classifyResultArrayList.get(i).setQuantity(calories[i] / calorieSum * baseQuantity); + } + return classifyResultArrayList; } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java index 6a3767d..d2f842b 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java @@ -1,5 +1,7 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; + import java.util.ArrayList; /** @@ -11,6 +13,7 @@ public class ConstantUtils { public static String[] dailyDescibes = {"快乐陪周一", "幸运伴周二", "轻松有周三", "温馨携周四", "愉悦同周五", "休闲找周六", "潇洒属周日"}; + public static String arab2Chinese(int number) { switch (number) { case 1: @@ -267,4 +270,32 @@ public class ConstantUtils { "平和质人阴阳气血平衡,药膳调理不可偏补、贪补,以保持人体阴阳平衡状态最为紧要。所谓“不伤不扰,顺其自然”。" }; + public static String BD_API_KEY = "GQfoj7AUUhj67ocHuwvA8G5q"; + public static String BD_APP_ID = "14346167"; + public static String BD_SECRET_KEY = "EEXe6pG7QGVdrqDM8eR0S3RY2WPf4Gwn"; + public static String BD_ACCESS_TOKEN = ""; + + public static String BD_DISH_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v2/dish"; + + public static ArrayList testData = new ArrayList<>(); + + static { + for (int i = 0; i < 7; i++) { + ClassifyResult classifyResult = new ClassifyResult(); + classifyResult.setName("酱肉丝" + i); + classifyResult.setProbability(0.5 + i); + classifyResult.setCalorie(274 + i * 10); + testData.add(classifyResult); + } + } + + public static ArrayList dishPicerData = new ArrayList<>(); + + static { + for (int i = 0; i <= 700; i++) { + if (i % 2 == 0) { + dishPicerData.add(i + ""); + } + } + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java index 1da17e5..d0ec119 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java @@ -3,6 +3,9 @@ package com.example.ninefourone.nutritionmaster.utils; import android.widget.Toast; import com.example.ninefourone.nutritionmaster.NutritionMaster; +import com.orhanobut.logger.Logger; + +import java.util.List; /** * Created by ScorpioMiku on 2018/8/26. @@ -13,4 +16,6 @@ public class MessageUtils { public static void MakeToast(String message) { Toast.makeText(NutritionMaster.getInstance(), message, Toast.LENGTH_SHORT).show(); } + + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java similarity index 88% rename from app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java rename to app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java index cd92de9..4fb70bd 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtil.java @@ -1,7 +1,21 @@ package com.example.ninefourone.nutritionmaster.utils; import com.google.gson.Gson; -import java.io.IOException; +import java.io.BufferedReader; +import java.io.DataOutputStream; + +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.StringWriter; +import java.io.Writer; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; + import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashMap; @@ -22,7 +36,7 @@ public class WebUtil { private static WebUtil instance = new WebUtil(); private OkHttpClient mClient = new OkHttpClient(); - private WebUtil() { + public WebUtil() { } public static WebUtil getInstance() { @@ -408,6 +422,54 @@ 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; + } + public static void main(String[] args) { Map params = new HashMap<>(); params.put("calorie", 100.0); diff --git a/app/src/main/res/drawable/camera_bg.jpg b/app/src/main/res/drawable/camera_bg.jpg new file mode 100644 index 0000000..d09ed63 Binary files /dev/null and b/app/src/main/res/drawable/camera_bg.jpg differ diff --git a/app/src/main/res/drawable/ic_calorie.xml b/app/src/main/res/drawable/ic_calorie.xml new file mode 100644 index 0000000..f627574 --- /dev/null +++ b/app/src/main/res/drawable/ic_calorie.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_copy.xml b/app/src/main/res/drawable/ic_copy.xml index fc173d3..224926c 100644 --- a/app/src/main/res/drawable/ic_copy.xml +++ b/app/src/main/res/drawable/ic_copy.xml @@ -1,6 +1,6 @@ - - - + + + diff --git a/app/src/main/res/drawable/ic_exchange_customization.xml b/app/src/main/res/drawable/ic_exchange_customization.xml index a89b3d5..a4cad63 100644 --- a/app/src/main/res/drawable/ic_exchange_customization.xml +++ b/app/src/main/res/drawable/ic_exchange_customization.xml @@ -1,7 +1,7 @@ - - - - + + + + diff --git a/app/src/main/res/drawable/ic_fat.xml b/app/src/main/res/drawable/ic_fat.xml new file mode 100644 index 0000000..371ee5d --- /dev/null +++ b/app/src/main/res/drawable/ic_fat.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_ok.xml b/app/src/main/res/drawable/ic_ok.xml index 400fd38..0d40b66 100644 --- a/app/src/main/res/drawable/ic_ok.xml +++ b/app/src/main/res/drawable/ic_ok.xml @@ -1,4 +1,5 @@ - + + diff --git a/app/src/main/res/drawable/ic_protein.xml b/app/src/main/res/drawable/ic_protein.xml new file mode 100644 index 0000000..f0a5460 --- /dev/null +++ b/app/src/main/res/drawable/ic_protein.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sugar.xml b/app/src/main/res/drawable/ic_sugar.xml new file mode 100644 index 0000000..93f4f08 --- /dev/null +++ b/app/src/main/res/drawable/ic_sugar.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_take_photo.xml b/app/src/main/res/drawable/ic_take_photo.xml new file mode 100644 index 0000000..a9904b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_take_photo.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/layout/activity_customization.xml b/app/src/main/res/layout/activity_customization.xml index 0b4bd26..89e5af6 100644 --- a/app/src/main/res/layout/activity_customization.xml +++ b/app/src/main/res/layout/activity_customization.xml @@ -12,6 +12,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="11" + android:background="#eae8e8" android:orientation="vertical"> + android:text="早餐" + android:textColor="#fff" + android:textSize="17sp" /> + android:layout_height="wrap_content" + android:background="#eae8e8"> + android:text="午餐" + android:textColor="#fff" + android:textSize="17sp" /> + android:layout_height="wrap_content" + android:background="#eae8e8"> + android:text="晚餐" + android:textColor="#fff" + android:textSize="17sp" /> + android:layout_height="wrap_content" + android:background="#eae8e8"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_dish_result.xml b/app/src/main/res/layout/activity_dish_result.xml new file mode 100644 index 0000000..a2a3606 --- /dev/null +++ b/app/src/main/res/layout/activity_dish_result.xml @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +