2012-01-30 288 views
9

我想在logcat中記錄像數組這樣的原始數據,所以我知道輸出是什麼。 可以說,我有一個數組...這樣的:如何在logcat中查看數組android

File[] mp3List = ... 
Log.v("test", mp3List); 

爲什麼我不能只要登錄陣列來安慰?我該怎麼做?

回答

10

這不起作用的原因僅僅是因爲Log.v的第二個參數是String而不是File[]。 Java嚴格執行參數類型。

更新

您可以輕鬆地將信息包含在File對象爲String對象。所有的java對象實現了一個toString(),如果我沒有記錯的話,返回對象所在的ClassNameaddress的組合。但是,這通常不包含有用的信息。所以你需要自己定義轉換。

我們將從File[]String因爲你的時候把它的工作原理數組對象上,而不是一個數組(其中包含我懷疑你關心的信息)的成員的陣列上的一個方法是更復雜。所以調用mp3List.toString()將返回一個描述數組對象的字符串,而不是數組中包含的信息。

所以,你可能會想編寫一個方法是這樣的:

String fileArrayToString(File[] f){ 
    String output = ""; 
    String delimiter = "\n" // Can be new line \n tab \t etc... 
    for (int i=0; i<f.length; i++) 
    { 
     output = output + f[i].getPath() + delimiter; 
    } 

    return output; 
} 

然後打電話讓你的通話記錄如下:

Log.v("MyTag", fileArraytoString(mp3List); 

然而,這可能是難以閱讀。

我個人會做這樣的:

for (int i=0; i<mp3List.legnth; i++) 
    Log.v("MyTag", Integer.toString(i) + ":" + mp3List[i].getPath()); 

它更簡單,生產更清潔的日誌信息,並更容易理解,作爲一個程序員是怎麼回事。

0

也許我誤解了,但我認爲它只是:

string sLog = ""; 
for(mp3List..) 
{ 
    sLog += mp3List[i].getName(); 
} 

Log.v(sLog); 

是不是?因爲,我想,當你嘗試打印一個數組一樣,你會得到一個日誌條目說mp3List是System.Blah.Blah.File[] ..

希望它可以幫助..

+3

字符串連接應使用一個StringBuilder來完成。使用+ =會爲每個迭代創建一個新的String對象,因爲字符串是不可變的。 – Jivings 2012-01-30 18:20:42

+0

@Jivings膝蓋深在C#.. :)謝謝.. – 2012-02-02 16:10:17

+0

沒問題,我仍然upvoted你的正確答案:) – Jivings 2012-02-02 16:33:25

1

如果你有一個String數組,你可以只需將toString()添加到它並顯示即可。

對於自定義對象,您應該重寫toString()方法並打印您想要查看該對象的內容。如果你有一個數組,那麼該數組將用toString方法的輸出打印。

+0

如果我使用toString,它會記錄類似於:「Ljava.io.File; @ 4052eac0」這對我毫無幫助。 – 2012-01-30 18:18:24

+0

這就是爲什麼你應該在要打印信息的類中重寫toString方法的原因。 – 2012-01-31 07:56:45

14

您不能記錄數組,因爲它只是一個對象。 LogCat不知道如何處理它或以你想要的方式顯示它。

如果每一個文件對象有顯示你願意,你可以使用信息的toString()方法:

Log.v(Arrays.toString(mp3List));

否則,你就必須來連接自己的字符串登錄:

StringBuilder sb = new StringBuilder(); 
for(File f : mp3List) { 
    sb.append(f.getName()); 
} 

Log.v(sb.toString()); 
0

我更喜歡一個套:

for(File file:list) Log.d(TAG, "list: " + file.getPath());