java - Android 应用程序因“尝试在空对象引用上调用虚拟方法”而崩溃
问题描述
我有一个带有 3 个选项卡或片段的“底部导航栏应用程序”。在第一个片段上,我有一个可以绘制的 PaintView。绘图效果很好。但我正在尝试连接一个通过选项菜单下拉调用的清除屏幕功能。当我从选项菜单中选择擦除屏幕的选项时,应用程序崩溃并出现以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.mobile_testapp_android_2.ui.home.PaintView.clearView()' on a null object reference
这是选项菜单的 HomeFragment.java 文件中的代码:
public class HomeFragment extends Fragment {
private PaintView paintView;
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
PaintView homeFragmentView = new PaintView(requireContext());
return homeFragmentView;
}
//Enable Clear Menu in this fragment
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//inflate menu
inflater.inflate(R.menu.menu_swipes, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Handle menu item clicks here
int id = item.getItemId();
if (id == R.id.action_clearScreen) {
//do clear function here:
paintView.clearView();
Toast.makeText(getActivity(), "Clear Screen", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
}
这是 PaintView 文件中的代码,其中包含我试图调用的 clearView() 方法:
public class PaintView extends View {
public ViewGroup.LayoutParams params;
private Path myPath = new Path();
private Paint brush = new Paint();
private boolean forceClear;
public PaintView(Context context) {
super(context);
brush.setAntiAlias(true);
brush.setColor(Color.MAGENTA);
brush.setStyle(Paint.Style.STROKE);
brush.setStrokeJoin(Paint.Join.ROUND);
brush.setStrokeWidth(8f);
params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
//Clear function
public void clearView() {
try {
forceClear = true;
invalidate();
} catch (Exception ee) {
Log.d("Clear Button: ", "We blew up!! " + ee);
}
}
我认为问题是由于我在 HomeFragment.java 文件中实例化 PaintView 类的方式,但我没有得到任何编译错误,我可以使用点符号paintView.clearView()
来访问 PaintView 类中的方法就好了.
任何关于我做错了什么的提示将不胜感激!
以下是一些屏幕截图:
解决方案
尝试使用您定义的变量:
// PaintView homeFragmentView = new PaintView(requireContext());
this.paintView = new PaintView(requireContext());
推荐阅读
- java - 如何使用java在spark sql中列出表名?
- python - 给出数字并用'1'填充列表中的第x个(x是数字)项,其他为空
- eclipse - Progress Developer Studio 11.6 没有响应
- sql-server - 将 Excel 导入 SQL Server
- ios - 为什么标签栏项目图标不在 iPad 设备的中心?
- python - 如何使用 stun 库 python 从远程服务器获取 TURN 中继分配
- sql-server - 仅包括不为空的记录的属性
- php - 语法错误或引擎错误?
- html - 更改 kableExtra 表标题的字体大小
- rust - 为什么 impl trait 不能用于返回多个/条件类型?