第一次安装时出现奇怪的双重错误? (机器人)

时间:2016-04-04 12:21:55

标签: android android-fragments double sharedpreferences

我正在开发一款应用程序,可以跟踪用户在一天内吃的食物的营养信息。我使用Double数据类型来获取食物本身的营养价值和一天食用的营养价值,这样我就可以更准确地显示信息(例如每100克12.7克/蛋白质,而不是每100克13克/蛋白质) )。为了保存和增加数据,即使用户关闭应用程序,我也使用了SharedPreferences,这非常合适。

然而,我遇到了一个非常奇怪的错误,如果用户第一次安装我的应用程序,一天吃的卡路里量等于30.7,一天吃的脂肪量等于0.4。当我在手机上运行应用程序,将其从我的设备上删除然后使用Android Studio重新安装时,会发生这种情况。我自然希望在安装应用程序时,一天内吃掉的所有营养价值都等于0,因为用户还没有添加任何值。

我的MainActivity包含一个名为DailyIntakeActivity的片段(我知道它不是一个Activity),在调用它时,它的OnCreateView将TextView设置为SharedPreferences给出的Double数据。此时用户还没有向SharedPreferences添加任何值,因此我希望它在所有TextView中显示为0.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_daily_intake, container, false);

    Calories_text = (TextView) rootView.findViewById(R.id.Calories_text);

    protein_text = (TextView) rootView.findViewById(R.id.protein_text);

    carbs_text = (TextView) rootView.findViewById(R.id.carbs_text);

    fats_text = (TextView) rootView.findViewById(R.id.fats_text);
    fab = (FloatingActionButton) rootView.findViewById(R.id.fab);

    CTX = getContext();

    SharedPreferences sharedPreferences = getActivity().getSharedPreferences("MyData", Context.MODE_PRIVATE);
    SPCalories = Double.longBitsToDouble(sharedPreferences.getLong("Calories", Double.doubleToLongBits(0)));
    SPProtein = Double.longBitsToDouble(sharedPreferences.getLong("Protein", Double.doubleToLongBits(0)));
    SPFats = Double.longBitsToDouble(sharedPreferences.getLong("Fats", Double.doubleToLongBits(0)));
    SPCarbs = Double.longBitsToDouble(sharedPreferences.getLong("Carbs", Double.doubleToLongBits(0)));

    DecimalFormat db = new DecimalFormat("#.#");
    db.setRoundingMode(RoundingMode.CEILING);

    if (SPCalories != 0) {

        dc_text = db.format(SPCalories);
        dp_text = db.format(SPProtein);
        d_cartext = db.format(SPCarbs);
        df_text = db.format(SPFats);
    }

    else if (SPCalories <= 30.7 && SPCalories > 30.6){
        dc_text = Integer.toString(0);
        dp_text = Integer.toString(0);
        d_cartext = Integer.toString(0);
        df_text = Integer.toString(0);
    }
    Calories_text.setText(String.format(getString(R.string.Calories), dc_text));
    protein_text.setText(String.format(getString(R.string.Protein), dp_text));
    carbs_text.setText(String.format(getString(R.string.Carbs), d_cartext));
    fats_text.setText(String.format(getString(R.string.Fats), df_text));

你可以看到我已经尝试通过告诉程序如果SPCalories小于30.7且大于30.6来解决这个问题,TextViews应该显示数字0,不幸的是这不起作用。

现在,对于上下文,用户向SharedPreferences添加值的方式是打开第二个活动并在EditText中填入数字,然后将这些数字作为Double数据类型保存到SharedPreferences中,然后在DailyIntakeActivity Fragment中读取我的MainActivity。因为即使用户还没有打开活动就会发生错误,因为这个问题已经很长了,我觉得没有必要在这里包含它的代码。

如果您对我有任何建议并祝你有愉快的一天,请告诉我!

维达尔

0 个答案:

没有答案