gpt4 book ai didi

java - 尝试添加到保存我的观察者的 arrayList 时出现空指针错误

转载 作者:行者123 更新时间:2023-12-01 22:39:47 24 4
gpt4 key购买 nike

我正在做一个关于可观察设计模式的练习。我有一个对话框 fragment ,我将在其中选择一种字体,然后通知 Activity 字体已更改。

在我的对话框中,我设置了一个 arrayList,它使用我的 Activity 作为其通用类型实现的接口(interface)。我这样声明

 private ArrayList<CustomStyleInterface> observers;

然后我在 onCreateView 方法中创建它

observers = new ArrayList<CustomStyleInterface>();

然后我有一个公共(public)方法将观察者添加到数组

public void  addListener(CustomStyleInterface listener) {
Log.d(TAG, "Listener: " + listener);
observers.add(listener);
}

在我创建对话框时实现 CustomeStyleInterface 接口(interface)的 Activity 中,我有此代码

CustomStyleDialogFragment customDialog = new CustomStyleDialogFragment();
customDialog.addListener(this);

这导致了空指针错误。我的日志显示正在传递一些东西。我花了几个小时在这上面,但无法弄清楚,所以任何帮助将不胜感激,非常感谢

logcat 粘贴日志标签和下面的错误

.CustomStyleDialogFragment( 2877): Listener: com.bloc.blocnotes.BlocNotes@528160e8
AndroidRuntime( 2877): Shutting down VM
dalvikvm( 2877): threadid=1: thread exiting with uncaught exception (group=0xa4cb3b20)
AndroidRuntime( 2877): FATAL EXCEPTION: main
AndroidRuntime( 2877): Process: com.bloc.blocnotes, PID: 2877
AndroidRuntime( 2877): java.lang.NullPointerException
AndroidRuntime( 2877): at com.bloc.blocnotes.CustomStyleDialogFragment.addListener(CustomStyleDialogFragment.ja
:68)
AndroidRuntime( 2877): at com.bloc.blocnotes.BlocNotes.onOptionsItemSelected(BlocNotes.java:118)
AndroidRuntime( 2877): at android.app.Activity.onMenuItemSelected(Activity.java:2600)
AndroidRuntime( 2877): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012

AndroidRuntime( 2877): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:
1)
AndroidRuntime( 2877): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
AndroidRuntime( 2877): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884)
AndroidRuntime( 2877): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
AndroidRuntime( 2877): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546)
AndroidRuntime( 2877): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115

AndroidRuntime( 2877): at android.view.View.performClick(View.java:4438)
AndroidRuntime( 2877): at android.view.View$PerformClick.run(View.java:18422)
AndroidRuntime( 2877): at android.os.Handler.handleCallback(Handler.java:733)
AndroidRuntime( 2877): at android.os.Handler.dispatchMessage(Handler.java:95)
AndroidRuntime( 2877): at android.os.Looper.loop(Looper.java:136)
AndroidRuntime( 2877): at android.app.ActivityThread.main(ActivityThread.java:5001)
AndroidRuntime( 2877): at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime( 2877): at java.lang.reflect.Method.invoke(Method.java:515)
AndroidRuntime( 2877): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
AndroidRuntime( 2877): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
AndroidRuntime( 2877): at dalvik.system.NativeStart.main(Native Method)

```

最佳答案

看起来您是在 onCreateView 触发之前添加监听器。您可以通过在 onCreateView 方法中添加一些日志记录并查看它是否出现在 logcat 中来确认这一点。

当您创建对话框时, View 本身尚未构建,因此此时您无法添加监听器。

将声明更改为

private ArrayList<CustomStyleInterface> observers = new ArrayList<CustomStyleInterface>();

然后从 onCreateView 中删除该行,以便更早创建 ArrayList

关于java - 尝试添加到保存我的观察者的 arrayList 时出现空指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com