对 TextView 的游标求和值

Summing Values from a Cursor for TextView

我正在尝试对两个游标的值求和并将结果放入文本视图中。当游标只返回一个值时,它工作得很好,但是当返回一个以上的值时,我不得不将游标放入一个 while 循环中,它停止工作。

主游标ingredientsCursor returns 一个列表或成分(这是有效的),然后在 while 循环内,两个游标从主游标中获取结果进行携带出两个单独的查询,然后将结果相乘并添加到要显示的 运行ning 总计中。

当我 运行 没有 while 循环的代码知道我只会从 ingredientsCursor 中得到一个结果时,一切正常,当有不止一个结果时,我必须使用while 循环。我已经将总数设置为一个全局变量,认为这是问题的一部分,但仍然只是空白 space.

显示结果(无 While 循环)

        final Cursor ingredientsCursor = adapter.getRecipesIngredients(recipeCode);
        ingredientsCursor.moveToFirst();

        String name = ingredientsCursor.getString(ingredientsCursor.getColumnIndex("ingredient_name"));

        final Cursor c = adapter.getRecipeCalories(name);
        c.moveToFirst();
        int cal = c.getInt(c.getColumnIndex("calories"));

        final Cursor m = adapter.getMeasurement(recipeCode, name);
        m.moveToFirst();
        int meas = m.getInt(m.getColumnIndex("measurement"));

        int total = cal * meas;

        recipeCalories.setText("Calories:" + total);

有While循环,显示空白

    final Cursor ingredientsCursor = adapter.getRecipesIngredients(recipeCode);
    ingredientsCursor.moveToFirst();
    while(ingredientsCursor.moveToNext())
    {
        String name = ingredientsCursor.getString(ingredientsCursor.getColumnIndex("ingredient_name"));

        final Cursor c = adapter.getRecipeCalories(name);
        c.moveToFirst();
        int cal = c.getInt(c.getColumnIndex("calories"));

        final Cursor m = adapter.getMeasurement(recipeCode, name);
        m.moveToFirst();
        int meas = m.getInt(m.getColumnIndex("measurement"));

        int MainActivity.total = cal * meas;

    }

    recipeCalories.setText("Calories:" + MainActivity.total);

每次运行 while 循环时,您都会覆盖 int MainActivity.total。 尝试将所有总值放入一个值列表中并显示其中的数据。

您覆盖每个循环步骤的总值。

  final Cursor ingredientsCursor = adapter.getRecipesIngredients(recipeCode);
    ingredientsCursor.moveToFirst();
    while(ingredientsCursor.moveToNext())
    {
        String name = ingredientsCursor.getString(ingredientsCursor.getColumnIndex("ingredient_name"));

        final Cursor c = adapter.getRecipeCalories(name);
        c.moveToFirst();
        int cal = c.getInt(c.getColumnIndex("calories"));

        final Cursor m = adapter.getMeasurement(recipeCode, name);
        m.moveToFirst();
        int meas = m.getInt(m.getColumnIndex("measurement"));
        // here is your error
        int MainActivity.total = cal * meas;

    }

您需要将代码更改为:

   final Cursor ingredientsCursor = adapter.getRecipesIngredients(recipeCode);
    ingredientsCursor.moveToFirst();
    int sum = 0;
    while(ingredientsCursor.moveToNext())
    {
        String name = ingredientsCursor.getString(ingredientsCursor.getColumnIndex("ingredient_name"));

        final Cursor c = adapter.getRecipeCalories(name);
        c.moveToFirst();
        int cal = c.getInt(c.getColumnIndex("calories"));

        final Cursor m = adapter.getMeasurement(recipeCode, name);
        m.moveToFirst();
        int meas = m.getInt(m.getColumnIndex("measurement"));

        sum += (cal * meas);

    }

    recipeCalories.setText("Calories:" + sum);