【问题标题】:cannot cast Integer to Float不能将整数转换为浮点数
【发布时间】:2018-06-12 03:51:13
【问题描述】:

我想在我的片段中存储一个浮点变量作为 SharedPreferences。所以我尝试设置它并稍后编辑它,但我在verbrauch = prefsver.getFloat("key", 0); 行中收到一个错误,即 Integer 无法转换为 Float 变量,尽管我认为我什至没有在那里使用 int。我存储的方式不对吗?

我的代码,它只是一个片段,所以我希望我没有剪掉任何相关的东西:

public class ItemThreeFragment extends Fragment {

    TextView textView11;
    float verbrauch;

    public static ItemThreeFragment newInstance() {
        ItemThreeFragment fragment = new ItemThreeFragment();
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View view = inflater.inflate(R.layout.fragment_item_three, container, false);

        SharedPreferences prefsver = getActivity().getBaseContext().getSharedPreferences("myPrefsKeyv",
                Context.MODE_PRIVATE);
        verbrauch = prefsver.getFloat("key",0);

        Button button = (Button) view.findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

        final EditText et = (EditText) getActivity().findViewById(R.id.editText);
                String str = et.getText().toString();

        verbrauch = Float.valueOf(str);

                SharedPreferences prefsver = getActivity().getSharedPreferences("myPrefsKeyv",
                        Context.MODE_PRIVATE);
                prefsver.edit().putFloat("key", verbrauch)
                        .apply();
            }
        });
}

【问题讨论】:

  • 尝试删除更多的东西,从而隔离产生异常的代码。并且请不要使用德语,甚至不要用作变量的名称...尝试创建产生相同错误的最小代码。然后,您可能会发现问题出在哪里。

标签: java android


【解决方案1】:

0 是一个 int 文字 - 不是浮点数。使用 0f(带后缀),或显式转换为 (float)0。

编辑:

还要检查您是否实际存储了一个浮点数,例如可能会有一些剩余价值。该方法将尝试将存储在 prefs 中的内容转换为浮点数,如果转换不成功,它会抛出 ClassCastException。

【讨论】:

  • 没有f,它被识别为双精度,但即使像0.0f我仍然得到错误
  • 好吧,我的错。虽然 ClassCastException 如果您不使用首选项屏幕,则有点不寻常。你确定里面存储的实际上是一个浮点数(例如使用调试器检查值)吗?
  • 我想我明白了,你给了我正确的提示!最后保存的值确实不是浮点数。谢谢!
  • 很高兴它有帮助 - 让我编辑我的答案以提出建议。
【解决方案2】:

verbrauch = prefsver.getFloat("key",0F); 是正确的。请注意 0 之后的 F 使其成为浮点数。

【讨论】:

  • 我试过了,我也想过,但是我的编译器仍然返回 ClassCastException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多