为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止将用户输入添加到 MPandroidchart 时出现

如何防止将用户输入添加到 MPandroidchart 时出现

小怪兽爱吃肉 2023-07-28 16:06:02
我使用 MPandroidchart 在 android studio 上的片段中创建了一个折线图,并使其图表的点来自用户输入。但是,我收到错误“java.lang.NullPointerException”。我知道此错误是由于尝试使用空值引起的,但我不确定如何在我的情况下修复它。编辑:用户输入保存在房间数据库中我从一个方法中检索用户输入,该方法中有代码确保输入为空时不会保存。我认为问题是因为图表正在尝试在用户添加数据之前构建,因为输入选项是显示图表的片段的一部分,因此图表正在尝试在数据准备好之前构建。Graph.javapublic class Graph extends Fragment {    public Graph() {        // Required empty public constructor    }    private LineChart mChart;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View view = inflater.inflate(R.layout.fragment_graph, container, false);        //initialize input1 database        InputRoomDatabase db = Room.databaseBuilder(getActivity(),InputRoomDatabase.class, "input_database")                .build();        //initialize chart        mChart = view.findViewById(R.id.chart);        //set description        Description description = new Description();        description.setText("Blood glucose levels");        mChart.setDescription(description);            //set description if no data is available        mChart.setNoDataText("No Data Available. Add a blood glucose level input to see your graph");        //enable touch gestures        mChart.setTouchEnabled(true);        //enable scaling and dragging        mChart.setDragEnabled(true);        mChart.setScaleEnabled(true);        //draw background grid        mChart.setDrawGridBackground(true);        //draw x-axis        XAxis xAxis = mChart.getXAxis();        xAxis.setEnabled(false);    }当我运行应用程序时,它崩溃并给出此错误 java.lang.NullPointerException: Attempt to invoke virtual method 'double android.os.Bundle.getDouble(java.lang.String)' on a null object reference 我已在 Graph.java 中用 ** 标记了问题代码正如我所说,我认为问题在于图表正在尝试在数据准备好之前构建,但我不确定如何避免这个问题。
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

代码:

Double d = getActivity().getIntent().getExtras().getDouble("STRING_I_NEED");
float myDataSet = d.floatValue();

假设 4 个方法调用都返回非空值。请参阅库方法的文档,了解它们何时可能返回null,以及一般如何避免令人不快的意外。

文档说getExtras()返回

之前用 putExtra() 添加的所有额外内容的映射,如果没有添加则为 null。

当调用可以返回 的库方法时null,您的代码应该检查结果null(或捕获NullPointerException),或确保这种情况不会发生,或两者兼而有之。

  • 由于Intents来自系统的其余部分,因此您不能保证它们总是有额外的内容,因此代码需要在调用之前测试getExtras()is的结果,并妥善处理。nullgetDouble()

  • 您还需要调试为什么它Intent没有您期望的额外内容。

  • 如果Intent具有额外项,但这些额外项没有名为 的双精度值"STRING_I_NEED",则将getDouble("STRING_I_NEED")返回0.0。您可能需要将显式传递defaultValuegetDouble()或测试Bundle containsKey("STRING_I_NEED").

  • 如果您想要浮点值,请考虑调用getFloat()而不是getDouble(). 我认为这会将双精度值转换为浮点数。


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信