2011-11-17 60 views
0

此代碼:記錄開關實現

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

editet問題集中在問題 – mpugach

回答

0

我沒有把值賦給字符串資源,而是在特殊的類中使用了靜態變量。

public class constants { 

public static final boolean logging = true; 

} 

,因此它可以從任何活動訪問:

private boolean logging = constants.logging; 
2

你有沒有考慮過使用正確的日誌框架?

如果使用SLF4J API,你可以寫這樣的東西

log.debug("A={}, B={}", a, b) 

,其中開關在外部有充分證據的方式是否生成日誌語句或沒有設置。此外,slf4j {} -construct允許延遲對a.toString()和b.toString()的調用,直到之後的日誌框架已確定實際需要生成日誌消息。

slf4j是一個API。你有幾個後端可供選擇。對於初學者,您可以選擇「簡單」後端。

查看http://slf4j.org/manual.html的介紹。

+0

謝謝。即時通訊使用android.util.Log框架,你提出了一個門面爲同一個框架。爲了實現slf4j,我必須重寫很多代碼。讓事情變得簡單。我只需要一個全局變量。 – mpugach