我使用 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的结果,并妥善处理。null
getDouble()
您还需要调试为什么它
Intent
没有您期望的额外内容。如果
Intent
具有额外项,但这些额外项没有名为 的双精度值"STRING_I_NEED"
,则将getDouble("STRING_I_NEED")
返回0.0
。您可能需要将显式传递defaultValue
给getDouble()
或测试Bundle
containsKey("STRING_I_NEED")
.如果您想要浮点值,请考虑调用
getFloat()
而不是getDouble()
. 我认为这会将双精度值转换为浮点数。
添加回答
举报
0/150
提交
取消