此代码:
public class MyActivity extends Activity {
private final boolean logging = getResources().getBoolean(R.bool.logging);
@Override
public void onCreate(Bundle savedInstanceState) {
if(logging) Log.d("my_log", "some text here");
// some onCreate code...
}
}
生成NullPointerException。
但是这个:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
final boolean logging = getResources().getBoolean(R.bool.logging);
if(logging) Log.d("my_log", "some text here");
// some onCreate code...
}
}
没有。
使用布尔资源切换整个应用程序中的日志记录的主要想法。
我可以为类中的每个函数成功声明这个变量,但是它可以只为整个类做一次吗?
答案 0 :(得分:2)
您是否考虑过使用正确的日志框架?
如果你使用slf4j API,你可以编写像
这样的东西log.debug("A={}, B={}", a, b)
其中,无论是否生成日志语句,都以外部设置的方式设置交换机。此外,slf4j {} -construct允许延迟对a.toString()和b.toString()的调用,直到之后日志框架确定实际需要生成日志消息。
slf4j是一个API。您有几个后端可供选择。对于初学者,你可以选择“简单”的后端。
请参阅http://slf4j.org/manual.html了解相关信息。
答案 1 :(得分:0)
我没有将值放在字符串资源上,而是在特殊类中使用了静态变量。
public class constants {
public static final boolean logging = true;
}
所以可以从任何活动访问它:
private boolean logging = constants.logging;