当前位置: 首页 > 知识库问答 >
问题:

尝试调用虚拟方法-空对象引用

方永贞
2023-03-14

我正在尝试实现一个外部色轮,它应该出现在的片段一直在崩溃我的应用程序。我想我明白为什么会发生这种情况,但是在尝试修复它大约6个小时后,我就要放弃了。我知道之前有人问过这个问题,但是我无法为我的特定问题导出一个修复程序。下面是我的代码:



    private ColorchoiceViewModel galleryViewModel;


    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        galleryViewModel =
                ViewModelProviders.of(this).get(ColorchoiceViewModel.class);
        View root = inflater.inflate(R.layout.fragment_colorchoice, container, false);

        galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
            }
        });



        ColorPickerView colorPickerView = (ColorPickerView) root.findViewById(R.id.colorPickerView);
        colorPickerView.setColorListener (new ColorListener() {
            @Override
            public void onColorSelected(ColorEnvelope colorEnvelope) {
                Toast.makeText(getActivity(), "Color:" + colorEnvelope.getColorRGB(), Toast.LENGTH_SHORT).show();
            }
        });



        return root;
    }
}

这是Logcat错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.skydoves.colorpickerpreference.ColorPickerView.setColorListener(com.skydoves.colorpickerpreference.ColorListener)' on a null object reference
        at com.lsh.homeauto.ui.colorchoice.ColorchoiceFragment.onCreateView(ColorchoiceFragment.java:43)

如果有人能帮我解决这个问题,那就太好了。提前谢谢^^

编辑:这是我的XML,按要求:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="horizontal"
    android:gravity="center">

    <com.skydoves.colorpickerpreference.ColorPickerView
        android:id="@+id/colorPickerView"
        android:layout_width="300dp"
        android:layout_height="300dp"
        app:palette="@drawable/palette"
        app:selector="@drawable/wheel" />


</LinearLayout>

共有1个答案

支淮晨
2023-03-14

这可能是因为您试图在一个甚至未创建的视图上使用setColorListener。请注意,您正在onCreateView方法中使用此方法。我建议您在onViewCreated方法中移动这些行。

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

        ColorPickerView colorPickerView = (ColorPickerView) view.findViewById(R.id.colorPickerView);
        colorPickerView.setColorListener (new ColorListener() {
            @Override
                public void onColorSelected(ColorEnvelope colorEnvelope) {
                Toast.makeText(getActivity(), "Color:" + colorEnvelope.getColorRGB(), Toast.LENGTH_SHORT).show();
            }
        });
}
 类似资料: