方法调用';fab.setOnClickListener(new View.OnClickListener(){@Override public void on…';可能产生';java.lang.NullPointerException';

方法调用';fab.setOnClickListener(new View.OnClickListener(){@Override public void on…';可能产生';java.lang.NullPointerException';,java,android,android-studio,Java,Android,Android Studio,我在安卓Studio 1.5.1中创建了一个新的空白活动项目,使用min API 15 生成代码后,我有以下警告/错误: 代码输入: 代码输入: 代码输入: 请告诉我如何解决此问题及其原因。我是Android和Android Studio的新手。以前我使用过Apache Cordova。只需检查/断言fab是否为空: if (fab != null) 或: 像这样: FloatingActionButton fab = (FloatingActionButton) fin

我在安卓Studio 1.5.1中创建了一个新的空白活动项目,使用min API 15

生成代码后,我有以下警告/错误:

代码输入:

代码输入:


代码输入:



请告诉我如何解决此问题及其原因。我是Android和Android Studio的新手。以前我使用过Apache Cordova。

只需检查/断言fab是否为空:

if (fab != null)
或:

像这样:

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    if (fab != null)
    fab.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                 .setAction("Action", null).show();
           }
     });
在这一行中,将
onClicklistener
实例作为第二个参数传递给
setAction
方法

snackbar可以包含通过设置的操作 setAction(CharSequence,android.view.view.OnClickListener)

像这样改变它

    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
        .setAction("Action", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //whatever you want to do when "Action" is clicked in the SnackBar
            }
        }).show();

此空指针是由于Snackbar而来,而不是因为您的浮动按钮。您需要在set Action方法中创建click listener的对象,而不是传递空值。

Hi Nonthonbam,这是一个警告。警告出现在Snackbar的
setAction
方法中。如果查看(在本例中为
fab
)如果为null,则不会显示警告。此警告将显示在所有视图中,而不仅仅是snackbarIn。在这种情况下,
fab
已初始化,因此此警告将不会显示。在这种情况下显示此警告是因为传递给setAction方法的null值其他视图如何?我们如何避免此情况?如果视图已正确初始化,则会显示此警告警告不会显示。但是如果视图为空,它可能会在运行时抛出
NullPointerException
。我也有同样的问题,即使这样,我在Snackbar中添加了一个操作,它仍然会给我这个警告。解决方案是在onCreate之外创建view.OnclickListener,并将其传递到Snackbar中,出于某种原因,这是可行的。
if (fab != null)
assert fab != null;
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    if (fab != null)
    fab.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                 .setAction("Action", null).show();
           }
     });
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
        .setAction("Action", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //whatever you want to do when "Action" is clicked in the SnackBar
            }
        }).show();