猿问

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

我使用 MPandroidchart 在 android studio 上的片段中创建了一个折线图,并使其图表的点来自用户输入。但是,我收到错误“java.lang.NullPointerException”。我知道此错误是由于尝试使用空值引起的,但我不确定如何在我的情况下修复它。

编辑:用户输入保存在房间数据库中

我从一个方法中检索用户输入,该方法中有代码确保输入为空时不会保存。我认为问题是因为图表正在尝试在用户添加数据之前构建,因为输入选项是显示图表的片段的一部分,因此图表正在尝试在数据准备好之前构建。

Graph.java

public 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 中用 ** 标记了问题代码

正如我所说,我认为问题在于图表正在尝试在数据准备好之前构建,但我不确定如何避免这个问题。


小怪兽爱吃肉
浏览 103回答 1
1回答

慕码人2483693

代码: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。您可能需要将显式传递defaultValue给getDouble()或测试Bundle containsKey("STRING_I_NEED").如果您想要浮点值,请考虑调用getFloat()而不是getDouble(). 我认为这会将双精度值转换为浮点数。
随时随地看视频慕课网APP

相关分类

Java
我要回答