Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

In what manner are values added to a list in android studio?

I have been getting this problem when trying to retrieve data from the database: I save the data into ‘new recipe’ and then add that to the list, however, whenever I try to get the value from an index in that list, it says it is out of index range in logcat(java.lang.IndexOutOfBoundsException: Index: 1, Size: 1), even though the index is 1. This leads me to ask: When adding to a list in this way, are all the variables stored in one item in the list rather than 8 separate ones?

Here’s the code for reading and adding to the list (inDBHelper Class):

 public List<RecipeModel> readRecipe() {
        SQLiteDatabase db = this.getReadableDatabase();
        List<RecipeModel> returnRecipe = new ArrayList<>();

        String queryString = "SELECT * FROM " + RECIPE_TABLE;

        Cursor cursor = db.rawQuery(queryString, null);

        cursor.moveToLast();
        int recipeID = cursor.getInt(0);
        String recipeName = cursor.getString(1);
        String recipeCountry = cursor.getString( 2);
        String recipeHours = cursor.getString(3);
        String recipeMinutes = cursor.getString(4);
        String recipeEquipment = cursor.getString(5);
        String recipeIngredients = cursor.getString(6);
        String recipeMethod = cursor.getString(7);
        String recipeStory = cursor.getString(8);

        RecipeModel newRecipe = new RecipeModel(recipeID, recipeName, recipeCountry, recipeHours, recipeMinutes, recipeEquipment, recipeIngredients, recipeMethod, recipeStory);

        returnRecipe.add(newRecipe);
        cursor.close();
        db.close();
        return returnRecipe;

    }

Here is the code that is trying to get the value from the list index (in Main Activity):

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

 DBHelper dbHelper = new DBHelper(preview_recipe.this);
        //call read function and array
        List<RecipeModel> returnRecipe = dbHelper.readRecipe();

        //Setting values into text views
        viewRecipeName.setText((CharSequence) returnRecipe.get(1));
        viewCountry.setText((CharSequence) returnRecipe.get(2));
        viewTxtHours.setText((CharSequence) returnRecipe.get(3));
        viewMins.setText((CharSequence) returnRecipe.get(4));
        viewTxtEquipment.setText((CharSequence) returnRecipe.get(5));
        viewTxtIngredients.setText((CharSequence) returnRecipe.get(6));
        viewTxtMethod.setText((CharSequence) returnRecipe.get(7));
        viewPersonalStory.setText((CharSequence) returnRecipe.get(8));

RecipeModel (excluding getters and setters) :

public class RecipeModel {
    private int id;
    private String recipeName;
    private String recipeCountry;
    private String recipeHours;
    private String recipeMinutes;
    private String recipeEquipment;
    private String recipeIngredients;
    private String recipeMethod;
    private String recipeStory;

    public RecipeModel(int id, String recipeName, String recipeCountry, String recipeHours, String recipeMinutes, String recipeEquipment, String recipeIngredients, String recipeMethod, String recipeStory) {
        this.id = id;
        this.recipeName = recipeName;
        this.recipeCountry = recipeCountry;
        this.recipeHours = recipeHours;
        this.recipeMinutes = recipeMinutes;
        this.recipeEquipment = recipeEquipment;
        this.recipeIngredients = recipeIngredients;
        this.recipeMethod = recipeMethod;
        this.recipeStory = recipeStory;
    }


    @Override
    public String toString() {
        return "RecipeModel{" +
                "id=" + id +
                ", recipeName='" + recipeName + '\'' +
                ", recipeCountry='" + recipeCountry + '\'' +
                ", recipeHours='" + recipeHours + '\'' +
                ", recipeMinutes='" + recipeMinutes + '\'' +
                ", recipeEquipment='" + recipeEquipment + '\'' +
                ", recipeIngredients='" + recipeIngredients + '\'' +
                ", recipeMethod='" + recipeMethod + '\'' +
                ", recipeStory='" + recipeStory + '\'' +
                '}';
    }

>Solution :

The method List<RecipeModel> readRecipe() return a List who contain a single RecipeModel.

You should write :

        viewRecipeName.setText((CharSequence) returnRecipe.get(0).getName());
        viewCountry.setText((CharSequence) returnRecipe.get(0).getCountry());
        viewTxtHours.setText((CharSequence) returnRecipe.get(0).getTxtHours());
        ...

If you need just to fill the informations of a single RecipeModel , change the helper Method return type is better , i suggest that you make it return a RecipeModel not a List of RecipeModels.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading