变量'snackbar'可能尚未初始化 [英] Variable 'snackbar' might not have been initialized

查看:231
本文介绍了变量'snackbar'可能尚未初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到此错误消息,指出变量snackbar可能尚未初始化

I am getting this error message saying that Variable "snackbar" might not have been initialized.

以下是我的 MainActivity.java 代码的一部分:

The following is part of my MainActivity.java code:

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

    if (info != null && info.isConnected()) {
        final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "WiFi change detected; updating information...", Snackbar.LENGTH_LONG)
            .setAction("DISMISS", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    snackbar.dismiss();
                }
            });
            snackbar.setActionTextColor(Color.BLUE);
            snackbar.show();

            getWifi();
    }
}
}

我读过已接受的堆栈溢出回答此处,它表明我在公共类NetworkChangeReceiver扩展BroadcastReceiver 之后立即初始化 snackbar 。所以,我把代码改为:

I had read the accepted Stack Overflow answer here and it suggests that I initialize snackbar immediately after public class NetworkChangeReceiver extends BroadcastReceiver. So, I changed the code to:

/* no changes here */
@Override
public void onReceive(Context context, Intent intent) {
    Snackbar snackbar = null;

    /* no changes here */
    if (...) {
        snackbar = Snackbar.make(...);
    }

    /* no changes here */
}

但是这给了我一个错误变量snackbar是从内部类中访问的,需要声明为final 并且警告方法调用snackbar.dismiss()可能会产生java.lang.NullPointerException

But this gives me an error Variable "snackbar" is accessed from within inner class, needs to be declared final and a warning Method invocation "snackbar.dismiss()" may produce "java.lang.NullPointerException".

有关如何解决此问题的任何建议?谢谢!

Any suggestions on how to solve this? Thanks!

推荐答案

拆分链式方法调用:

final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "WiFi change detected; updating information...", Snackbar.LENGTH_LONG);
snackbar.setAction("DISMISS", new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      snackbar.dismiss();
    }
  });

这样, snackbar 肯定是在之前分配的你创建 OnClickListener

This way, snackbar is definitely assigned before you create the OnClickListener.

这篇关于变量'snackbar'可能尚未初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆