Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- food
- package uk.ac.tees.cupcake.food;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Map;
- /**
- * Created by /**
- * {@author Bradley Hunter < s6263464@live.tees.ac.uk}
- * {@author Sam Hammersley < q5315908@live.tees.ac.uk}
- */
- public final class Food {
- private final String label;
- private final String category;
- private final Map<String, Double> nutritionalValues;
- public Food(String label, Map<String, Double> nutritionalValues, String category){
- this.label = label;
- this.category = category;
- this.nutritionalValues = nutritionalValues;
- }
- @Override
- public String toString() {
- return label + "" + nutritionalValues;
- }
- public String getLabel() {
- return label;
- }
- public String getCategory() { return category; }
- public Map<String, Double> getNutritionalValues() { return nutritionalValues; }
- public static List<Food> fromJSONArray(JSONArray array){
- List<Food> foods = new LinkedList<>();
- try{
- for (int index = 0; index < array.length(); index++){
- JSONObject foodObject = array.getJSONObject(index).getJSONObject("food");
- String label = foodObject.getString("label");
- JSONObject nutrients = foodObject.getJSONObject("nutrients");
- String category = foodObject.getString("category");
- Map<String,Double> nutritionalValues = new HashMap<>();
- Iterator<String> it = nutrients.keys();
- while(it.hasNext()){
- String key = it.next();
- double value = nutrients.getDouble(key);
- nutritionalValues.put(key,value);
- }
- foods.add(new Food(label,nutritionalValues, category));
- }
- return foods;
- }catch(JSONException e){
- throw new RuntimeException("Failed to parse food response ", e);
- }
- }
- public static List<Food> fromJSONObject(String jsonString){
- try {
- JSONObject object = new JSONObject(jsonString);
- List<Food> food = fromJSONArray(object.getJSONArray("parsed"));
- food.addAll(fromJSONArray(object.getJSONArray("hints")));
- return food;
- } catch(JSONException e) {
- throw new RuntimeException("Failed to parse food response", e);
- }
- }
- private static final Map<String, String> NUTRITIONAL_LABELS = new HashMap<>();
- static {
- NUTRITIONAL_LABELS.put("procnt", "protein");
- NUTRITIONAL_LABELS.put("fat", "fat");
- NUTRITIONAL_LABELS.put("fibtg", "fibre");
- NUTRITIONAL_LABELS.put("enerc_kcal", "calories");
- NUTRITIONAL_LABELS.put("chocdf", "carbohydrates");
- }
- public static String getReadableLabel(String tag) {
- return NUTRITIONAL_LABELS.get(tag.toLowerCase());
- }
- }
- food adapter
- package uk.ac.tees.cupcake.food;
- import android.support.v7.widget.RecyclerView;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- import java.util.List;
- import java.util.Map;
- import uk.ac.tees.cupcake.R;
- /**
- * Created by /**
- * {@author Bradley Hunter < s6263464@live.tees.ac.uk}
- * {@author Sam Hammersley < q5315908@live.tees.ac.uk}
- */
- public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.ViewHolder> {
- private final List<Food> foods;
- public FoodAdapter(List<Food> foods){
- this.foods = foods;
- }
- @Override
- public FoodAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_search_food_row, parent, false);
- return new ViewHolder(v);
- }
- @Override
- public void onBindViewHolder(FoodAdapter.ViewHolder holder, int position) {
- Food food = foods.get(position);
- holder.mFoodLabel.setText(food.getLabel());
- holder.mFoodCategory.setText(food.getCategory());
- setNutritionalValuesText(food.getNutritionalValues(), holder.mFoodNutritionLeft, holder.mFoodNutritionRight);
- }
- private void setNutritionalValuesText(Map<String, Double> nutritionalValues, TextView column1, TextView column2) {
- StringBuilder columnText1 = new StringBuilder();
- StringBuilder columnText2 = new StringBuilder();
- int index = 0;
- for (Map.Entry<String, Double> entry : nutritionalValues.entrySet()) {
- String readableLabel = Food.getReadableLabel(entry.getKey());
- (index++ % 2 == 0 ? columnText1 : columnText2)
- .append("\n")
- .append(readableLabel)
- .append(": ")
- .append(String.format("%.2f", entry.getValue()));
- }
- column1.setText(columnText1);
- column2.setText(columnText2);
- }
- @Override
- public int getItemCount() {
- return foods.size();
- }
- public class ViewHolder extends RecyclerView.ViewHolder{
- private TextView mFoodLabel;
- private TextView mFoodCategory;
- private TextView mFoodNutritionLeft;
- private TextView mFoodNutritionRight;
- public ViewHolder(View itemView) {
- super(itemView);
- mFoodLabel = itemView.findViewById(R.id.search_food_row_label_value_text_view);
- mFoodCategory = itemView.findViewById(R.id.search_food_row_category_value_text_view);
- mFoodNutritionLeft = itemView.findViewById(R.id.seach_food_row_nutrition_label_left_text_view);
- mFoodNutritionRight = itemView.findViewById(R.id.seach_food_row_nutrition_label_right_text_view);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement