Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. food
  2.  
  3. package uk.ac.tees.cupcake.food;
  4.  
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8.  
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.LinkedList;
  12. import java.util.List;
  13. import java.util.Map;
  14.  
  15. /**
  16. * Created by /**
  17. * {@author Bradley Hunter < s6263464@live.tees.ac.uk}
  18. * {@author Sam Hammersley < q5315908@live.tees.ac.uk}
  19. */
  20.  
  21. public final class Food {
  22.  
  23. private final String label;
  24.  
  25. private final String category;
  26.  
  27. private final Map<String, Double> nutritionalValues;
  28.  
  29. public Food(String label, Map<String, Double> nutritionalValues, String category){
  30. this.label = label;
  31. this.category = category;
  32. this.nutritionalValues = nutritionalValues;
  33. }
  34.  
  35. @Override
  36. public String toString() {
  37. return label + "" + nutritionalValues;
  38. }
  39.  
  40. public String getLabel() {
  41. return label;
  42. }
  43.  
  44. public String getCategory() { return category; }
  45.  
  46. public Map<String, Double> getNutritionalValues() { return nutritionalValues; }
  47.  
  48. public static List<Food> fromJSONArray(JSONArray array){
  49. List<Food> foods = new LinkedList<>();
  50.  
  51. try{
  52. for (int index = 0; index < array.length(); index++){
  53.  
  54. JSONObject foodObject = array.getJSONObject(index).getJSONObject("food");
  55.  
  56. String label = foodObject.getString("label");
  57. JSONObject nutrients = foodObject.getJSONObject("nutrients");
  58. String category = foodObject.getString("category");
  59.  
  60. Map<String,Double> nutritionalValues = new HashMap<>();
  61.  
  62. Iterator<String> it = nutrients.keys();
  63. while(it.hasNext()){
  64. String key = it.next();
  65. double value = nutrients.getDouble(key);
  66. nutritionalValues.put(key,value);
  67. }
  68.  
  69. foods.add(new Food(label,nutritionalValues, category));
  70. }
  71.  
  72. return foods;
  73. }catch(JSONException e){
  74. throw new RuntimeException("Failed to parse food response ", e);
  75. }
  76. }
  77.  
  78. public static List<Food> fromJSONObject(String jsonString){
  79. try {
  80. JSONObject object = new JSONObject(jsonString);
  81.  
  82. List<Food> food = fromJSONArray(object.getJSONArray("parsed"));
  83. food.addAll(fromJSONArray(object.getJSONArray("hints")));
  84.  
  85. return food;
  86. } catch(JSONException e) {
  87. throw new RuntimeException("Failed to parse food response", e);
  88. }
  89. }
  90.  
  91. private static final Map<String, String> NUTRITIONAL_LABELS = new HashMap<>();
  92.  
  93. static {
  94. NUTRITIONAL_LABELS.put("procnt", "protein");
  95. NUTRITIONAL_LABELS.put("fat", "fat");
  96. NUTRITIONAL_LABELS.put("fibtg", "fibre");
  97. NUTRITIONAL_LABELS.put("enerc_kcal", "calories");
  98. NUTRITIONAL_LABELS.put("chocdf", "carbohydrates");
  99. }
  100.  
  101. public static String getReadableLabel(String tag) {
  102. return NUTRITIONAL_LABELS.get(tag.toLowerCase());
  103. }
  104.  
  105. }
  106.  
  107.  
  108. food adapter
  109.  
  110.  
  111. package uk.ac.tees.cupcake.food;
  112.  
  113. import android.support.v7.widget.RecyclerView;
  114. import android.view.LayoutInflater;
  115. import android.view.View;
  116. import android.view.ViewGroup;
  117. import android.widget.TextView;
  118.  
  119. import java.util.List;
  120. import java.util.Map;
  121.  
  122. import uk.ac.tees.cupcake.R;
  123.  
  124. /**
  125. * Created by /**
  126. * {@author Bradley Hunter < s6263464@live.tees.ac.uk}
  127. * {@author Sam Hammersley < q5315908@live.tees.ac.uk}
  128. */
  129.  
  130. public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.ViewHolder> {
  131.  
  132. private final List<Food> foods;
  133.  
  134. public FoodAdapter(List<Food> foods){
  135. this.foods = foods;
  136. }
  137.  
  138. @Override
  139. public FoodAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  140. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_search_food_row, parent, false);
  141. return new ViewHolder(v);
  142. }
  143.  
  144. @Override
  145. public void onBindViewHolder(FoodAdapter.ViewHolder holder, int position) {
  146. Food food = foods.get(position);
  147. holder.mFoodLabel.setText(food.getLabel());
  148. holder.mFoodCategory.setText(food.getCategory());
  149.  
  150. setNutritionalValuesText(food.getNutritionalValues(), holder.mFoodNutritionLeft, holder.mFoodNutritionRight);
  151. }
  152.  
  153. private void setNutritionalValuesText(Map<String, Double> nutritionalValues, TextView column1, TextView column2) {
  154. StringBuilder columnText1 = new StringBuilder();
  155. StringBuilder columnText2 = new StringBuilder();
  156.  
  157. int index = 0;
  158. for (Map.Entry<String, Double> entry : nutritionalValues.entrySet()) {
  159. String readableLabel = Food.getReadableLabel(entry.getKey());
  160. (index++ % 2 == 0 ? columnText1 : columnText2)
  161. .append("\n")
  162. .append(readableLabel)
  163. .append(": ")
  164. .append(String.format("%.2f", entry.getValue()));
  165. }
  166.  
  167. column1.setText(columnText1);
  168. column2.setText(columnText2);
  169. }
  170.  
  171. @Override
  172. public int getItemCount() {
  173. return foods.size();
  174. }
  175.  
  176. public class ViewHolder extends RecyclerView.ViewHolder{
  177.  
  178. private TextView mFoodLabel;
  179. private TextView mFoodCategory;
  180. private TextView mFoodNutritionLeft;
  181. private TextView mFoodNutritionRight;
  182.  
  183. public ViewHolder(View itemView) {
  184. super(itemView);
  185. mFoodLabel = itemView.findViewById(R.id.search_food_row_label_value_text_view);
  186. mFoodCategory = itemView.findViewById(R.id.search_food_row_category_value_text_view);
  187. mFoodNutritionLeft = itemView.findViewById(R.id.seach_food_row_nutrition_label_left_text_view);
  188. mFoodNutritionRight = itemView.findViewById(R.id.seach_food_row_nutrition_label_right_text_view);
  189. }
  190. }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement