@Override protected ArrayList<Drink> doInBackground(Void... params) { ArrayList<Drink> tempCocktailList = new ArrayList<Drink>(); ArrayList<Drink> cocktailList = new ArrayList<Drink>(); String url = "http://www.thecocktaildb.com/api/json/v1/1/filter.php?a=Alcoholic"; // http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in-java tempCocktailList = JsonHandler.getJSONFromUrl(url); for (Drink tempDrink : tempCocktailList) { String id = "http://www.thecocktaildb.com/api/json/v1/1/lookup.php?i=" + tempDrink.getIdDrink(); ArrayList<Drink> drinks = JsonHandler.getJSONFromUrl(id); cocktailList.add(drinks.get(0)); } return cocktailList; }
@Override protected void onPostExecute(ArrayList<Drink> cocktailList) { // IDs cocktailIds = new ArrayList<String>(); // Names cocktailNames = new ArrayList<String>(); // Ingredients still needed listIngredientsNeeded = new ArrayList<String>(); // Number of ingredients still needed listNumberIngredientsNeeded = new ArrayList<Integer>(); // For every possible drink for (Drink drink : cocktailList) { int numberOfBlanks = 0; int numberOfMatches = 0; String ingredientsNeeded = ""; // For every selected ingredient by the user for (String ingredient : cocktailIngredients) { // This code loops through each ingredient on the cocktail list and checks // if the user has any matching ingredients, the results are displayed as // user ingredient (number of needed ingredients) if (drink.getStrIngredient1().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient1(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient1(); } } else if (drink.getStrIngredient2().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient2(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient2(); } } else if (drink.getStrIngredient3().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient3(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient3(); } } else if (drink.getStrIngredient4().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient4(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient4(); } } else if (drink.getStrIngredient5().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient5(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient5(); } } else if (drink.getStrIngredient6().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient6(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient6(); } } else if (drink.getStrIngredient7().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient7(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient7(); } } else if (drink.getStrIngredient8().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient8(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient8(); } } else if (drink.getStrIngredient9().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient9(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient9(); } } else if (drink.getStrIngredient10().equals(ingredient)) { numberOfMatches++; if (ingredientsNeeded.equals("")) { ingredientsNeeded = drink.getStrIngredient10(); } else { ingredientsNeeded = ingredientsNeeded + ", " + drink.getStrIngredient10(); } } } // As we need the number of non-matches, we need to take off the ingredients // that are actually blank, so no comparison is possible if (drink.getStrIngredient1() == null || drink.getStrIngredient1() == "") { numberOfBlanks++; } if (drink.getStrIngredient2() == null || drink.getStrIngredient2() == "") { numberOfBlanks++; } if (drink.getStrIngredient3() == null || drink.getStrIngredient3() == "") { numberOfBlanks++; } if (drink.getStrIngredient4() == null || drink.getStrIngredient4() == "") { numberOfBlanks++; } if (drink.getStrIngredient5() == null || drink.getStrIngredient5() == "") { numberOfBlanks++; } if (drink.getStrIngredient6() == null || drink.getStrIngredient6() == "") { numberOfBlanks++; } if (drink.getStrIngredient7() == null || drink.getStrIngredient7() == "") { numberOfBlanks++; } if (drink.getStrIngredient8() == null || drink.getStrIngredient8() == "") { numberOfBlanks++; } if (drink.getStrIngredient9() == null || drink.getStrIngredient9() == "") { numberOfBlanks++; } if (drink.getStrIngredient10() == null || drink.getStrIngredient10() == "") { numberOfBlanks++; } // 10 possible ingredients - blanks - matches = ingredients needed int neededIngredients = 10 - numberOfBlanks - numberOfMatches; if (neededIngredients < 3 && numberOfMatches > 1) { cocktailIds.add(drink.getIdDrink()); cocktailNames.add(drink.getStrDrink()); listNumberIngredientsNeeded.add(neededIngredients); listIngredientsNeeded.add(ingredientsNeeded); } else { // Dont add the drink as it contains no ingredients that match } } mAdapter = new CocktailsAdapter( getActivity(), cocktailNames, listIngredientsNeeded, listNumberIngredientsNeeded); mCocktailList.setAdapter(mAdapter); mCocktailList.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.v(LOG_TAG, "Cocktails adapter pos clicked on:" + position); if (Utilities.isNetworkAvailable(getActivity())) { Intent intent = new Intent(getActivity(), DetailActivity.class); Bundle bundle = new Bundle(); bundle.putString("cocktail_id", cocktailIds.get(position)); intent.putExtras(bundle); startActivity(intent); } else { Log.e(LOG_TAG, "No internet connection"); Toast.makeText(getActivity(), R.string.no_internet, Toast.LENGTH_LONG).show(); } } }); dialog.hide(); }