明明已經執行Log.i,偏偏打不出日志


Android內打日志用的當然是Log.i(tag,string),調試時的日志輸出可以很快的反映一些問題,方便我們跟進。

但是如果連日志都打不出來了怎么辦呢,我今天就遇到了比較坑的問題。項目里別的日志都輸出正常,偏偏我寫的Log.i沒有打印出東西,過濾器,進程,什么的,都設置好了,日志死活出不來。

無奈,開啟單步調試,發現Log.i是執行了的,執行后還是沒有日志。怎么辦呢?

只能出大招了,反編譯自己的包,看看編譯器到底對我的代碼做了什么。果然就看到了編譯器使的壞。

下面是源代碼。

for (Map.Entry<String, String> entry : map.entrySet()) {
    Log.i("android", entry.getValue()) ;
}

將map里的所有value輸出來,很正常。但是編譯器會把它弄成這樣。

Iterator i$ = map.entrySet().iterator();

while(i$.hasNext()) {
    Entry entry = (Entry) i$.next() ;
    Log.i("android", (String)entry.getValue()) ;
}

看上去似乎也很正常,但是仔細查看上下文發現。我的entry.getValue是一個ArrayList,將ArrayList強轉成String是不能成功的,所以,這個日志輸出的語句就失敗了。

 

然后,顯式的調用Log.i("android", entry.getValue())就可以解決問題了。

我其實很不解為什么會編譯成強轉,而不是調用toString。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM