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

Java 尝试添加到保存我的观察者的arrayList时出现空指针错误,java,android,Java,Android,我正在做一个关于可观察设计模式的练习。我有一个对话框片段,其中我将选择一种字体,然后通知一个活动该字体已更改 在我的对话框中,我设置了一个arrayList,它使用我的活动实现的接口作为其泛型类型。我谨此声明 private ArrayList<CustomStyleInterface> observers; 在创建对话框时实现CustomeStyleInterface接口的活动中,我有以下代码 CustomStyleDialogFragment customDialog = n

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

在我的对话框中,我设置了一个arrayList,它使用我的活动实现的接口作为其泛型类型。我谨此声明

 private ArrayList<CustomStyleInterface> observers;
在创建对话框时实现CustomeStyleInterface接口的活动中,我有以下代码

CustomStyleDialogFragment customDialog = new CustomStyleDialogFragment();
customDialog.addListener(this);
这将导致空指针错误。我的日志显示有东西正在通过tho传递。我已经花了几个小时在这个问题上,无法解决它,所以任何帮助将不胜感激,非常感谢

日志标签的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中来确认这一点

创建对话框时,视图本身尚未生成,因此此时无法添加侦听器

将声明更改为

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

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

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

创建对话框时,视图本身尚未生成,因此此时无法添加侦听器

将声明更改为

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

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

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

创建对话框时,视图本身尚未生成,因此此时无法添加侦听器

将声明更改为

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

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

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

创建对话框时,视图本身尚未生成,因此此时无法添加侦听器

将声明更改为

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

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

CustomStyleDialogFragment
构造函数中启动
ArrayList

public CustomStyleDialogFragment()
{
    observers = new ArrayList<CustomStyleInterface>();
}
public CustomStyleDialogFragment()
{
Observators=新的ArrayList();
}

OnCreateView调用得太晚。

CustomStyleDialogFragment
构造函数中启动
ArrayList

public CustomStyleDialogFragment()
{
    observers = new ArrayList<CustomStyleInterface>();
}
public CustomStyleDialogFragment()
{
Observators=新的ArrayList();
}

OnCreateView调用得太晚。

CustomStyleDialogFragment
构造函数中启动
ArrayList

public CustomStyleDialogFragment()
{
    observers = new ArrayList<CustomStyleInterface>();
}
public CustomStyleDialogFragment()
{
Observators=新的ArrayList();
}

OnCreateView调用得太晚。

CustomStyleDialogFragment
构造函数中启动
ArrayList

public CustomStyleDialogFragment()
{
    observers = new ArrayList<CustomStyleInterface>();
}
public CustomStyleDialogFragment()
{
Observators=新的ArrayList();
}

OnCreateView调用得太晚了。

您是否调试过OnCreateView()是在addListener()之前调用的?因为我看不到整个代码,所以我不得不推测。我感觉您的片段还没有调用onCreateView。所以传入的东西存在,但arraylist不存在。非常确定的是,片段只有在实际添加到视图时才使用createView。您是否调试过,以查看在addListener()之前调用onCreateView()?因为我看不到整个代码,所以我不得不推测。我感觉您的片段还没有调用onCreateView。所以传入的东西存在,但arraylist不存在。非常确定的是,片段只有在实际添加到视图时才使用createView。您是否调试过,以查看在addListener()之前调用onCreateView()?因为我看不到整个代码,所以我不得不推测。我感觉您的片段还没有调用onCreateView。所以传入的东西存在,但arraylist不存在。非常确定的是,片段只有在实际添加到视图时才使用createView。您是否调试过,以查看在addListener()之前调用onCreateView()?因为我看不到整个代码,所以我不得不推测。我感觉您的片段还没有调用onCreateView。所以传入的东西存在,但arraylist不存在。非常确定的是,片段只有在实际添加到视图中时才使用createView。这非常有意义,看起来就是正在发生的事情。同时声明和初始化它是一种不好的做法吗?这会解决这个问题issue@DanielH一点也不坏!这是完全有道理的,看起来就是正在发生的事情。同时声明和初始化它是一种不好的做法吗?这会解决这个问题issue@DanielH一点也不坏!这是完全有道理的,看起来就是正在发生的事情。同时声明和初始化它是一种不好的做法吗?这会解决这个问题issue@DanielH一点也不坏!这是完全有道理的,看起来就是正在发生的事情。声明和初始化它是一种不好的做法吗