有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尝试通过上下文菜单更新适配器时引发java Null异常

我正在开发一个简单的应用程序,可以存储关于一本书及其人物的信息。我目前正在通过上下文菜单从列表视图中删除我的书籍项目

问题是,当我按下delete按钮并试图通过更新适配器从列表视图中删除该项时,我得到了java.lang.NullPointerException异常。以下是onCreateContextMenu

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.delete_context_menu,menu);

}

以下是onContextItemSelected

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int index = info.position;
    books.remove(index);
    adapter.notifyDataSetChanged();
    return super.onContextItemSelected(item);
}

以下是堆栈跟踪:

08-11 09:28:22.061 5542-5542/com.example.opeyemi.storytime E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.opeyemi.storytime, PID: 5542 java.lang.NullPointerException at com.example.opeyemi.storytime.Activites.MainActivity_StoryBook.onContextItemSelected(MainActivity_StoryBook.java:99) at 安卓.app.Activity.onMenuItemSelected(Activity.java:2620) at 安卓.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353) at 安卓.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:144) at 安卓.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99) at com.安卓.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3864) at com.安卓.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741) at com.安卓.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) at com.安卓.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884) at com.安卓.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) at com.安卓.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167) at com.安卓.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941) at 安卓.widget.AdapterView.performItemClick(AdapterView.java:299) at 安卓.widget.AbsListView.performItemClick(AbsListView.java:1113) at 安卓.widget.AbsListView$PerformClick.run(AbsListView.java:2911) at 安卓.widget.AbsListView$3.run(AbsListView.java:3645) at 安卓.os.Handler.handleCallback(Handler.java:733) at 安卓.os.Handler.dispatchMessage(Handler.java:95) at 安卓.os.Looper.loop(Looper.java:136) at 安卓.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)


共 (1) 个答案

  1. # 1 楼答案

    你在一个适配器上调用adapter.notifyDataSetChanged();,你不知道它是否初始化过(很可能不是)

    确保它的初始化良好,然后一切都会好起来