记录开关实现

时间:2011-11-17 07:34:07

标签: java android

此代码:

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...
    }
}

没有。

使用布尔资源切换整个应用程序中的日志记录的主要想法。

我可以为类中的每个函数成功声明这个变量,但是它可以只为整个类做一次吗?

2 个答案:

答案 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;