变量'snackbar'可能尚未初始化 [英] Variable 'snackbar' might not have been initialized
问题描述
我收到此错误消息,指出变量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屋!