如何使用Android代码解决此NullPointerException问题?

时间:2019-10-01 13:15:18

标签: android nullpointerexception android-custom-view

这是DragFrame.class代码中的函数:

public void setFragment(FragmentManager fm, Fragment fragment) {
    fm.beginTransaction().add(R.id.frame_drag, fragment).commitAllowingStateLoss();
}

DragFrame.class是用于启用拖动框的自定义视图。然后在我的activity_main.xml中添加了这个自定义视图:

<com.android.example.exercise.Drag.DragFrame
    android:id="@+id/drag_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone" />

在我的MainActivity.class中,输入以下代码:

dragFrame = (DragFrame) findViewById(R.id.drag_frame);

dragFrame.setFragment(getSupportFragmentManager(), new DragFragment());
dragFrame.setOnDragListener(this);
dragFrame.close();

但是发生了错误,错误内容如下:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.example.exercise.Drag.DragFrame.setFragment(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment)' on a null object reference
    at com.android.example.exercise.activities.MainActivity.onCreate(MainActivity.java:78)

第78行是dragFrame.setFragment(getSupportFragmentManager(), new DragFragment);。我的代码有什么问题?我试图将代码放在MainActivity.class中:

if (dragFrame != null && getSupportFragmentManager() != null) {
        dragFrame.setFragment(getSupportFragmentManager(), new DragFragment());
        dragFrame.setOnDragListener(this);
        dragFrame.close();
    }

但这是行不通的;我该如何解决此代码?

1 个答案:

答案 0 :(得分:4)

dragFrame是一个空值,您正在playFragment上进行测试,请重新读取错误

com.android.example.exercise.Drag.**DragFrame**.setFragment(FragmentManager, Fragment)' on a null object reference

执行此操作:

if (dragFrame != null && getSupportFragmentManager() != null) {
        dragFrame.setFragment(getSupportFragmentManager(), new DragFragment());
        dragFrame.setOnDragListener(this);
        dragFrame.close();
    }