我想在logcat中記錄像數組這樣的原始數據,所以我知道輸出是什麼。 可以說,我有一個數組...這樣的:如何在logcat中查看數組android
File[] mp3List = ...
Log.v("test", mp3List);
爲什麼我不能只要登錄陣列來安慰?我該怎麼做?
我想在logcat中記錄像數組這樣的原始數據,所以我知道輸出是什麼。 可以說,我有一個數組...這樣的:如何在logcat中查看數組android
File[] mp3List = ...
Log.v("test", mp3List);
爲什麼我不能只要登錄陣列來安慰?我該怎麼做?
這不起作用的原因僅僅是因爲Log.v
的第二個參數是String
而不是File[]
。 Java嚴格執行參數類型。
更新:
您可以輕鬆地將信息包含在File
對象爲String
對象。所有的java對象實現了一個toString()
,如果我沒有記錯的話,返回對象所在的ClassName
和address
的組合。但是,這通常不包含有用的信息。所以你需要自己定義轉換。
我們將從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());
它更簡單,生產更清潔的日誌信息,並更容易理解,作爲一個程序員是怎麼回事。
也許我誤解了,但我認爲它只是:
string sLog = "";
for(mp3List..)
{
sLog += mp3List[i].getName();
}
Log.v(sLog);
是不是?因爲,我想,當你嘗試打印一個數組一樣,你會得到一個日誌條目說mp3List是System.Blah.Blah.File[]
..
希望它可以幫助..
如果你有一個String數組,你可以只需將toString()添加到它並顯示即可。
對於自定義對象,您應該重寫toString()方法並打印您想要查看該對象的內容。如果你有一個數組,那麼該數組將用toString方法的輸出打印。
如果我使用toString,它會記錄類似於:「Ljava.io.File; @ 4052eac0」這對我毫無幫助。 – 2012-01-30 18:18:24
這就是爲什麼你應該在要打印信息的類中重寫toString方法的原因。 – 2012-01-31 07:56:45
您不能記錄數組,因爲它只是一個對象。 LogCat不知道如何處理它或以你想要的方式顯示它。
如果每一個文件對象有顯示你願意,你可以使用信息的toString()方法:
Log.v(Arrays.toString(mp3List));
否則,你就必須來連接自己的字符串登錄:
StringBuilder sb = new StringBuilder();
for(File f : mp3List) {
sb.append(f.getName());
}
Log.v(sb.toString());
我更喜歡一個套:
for(File file:list) Log.d(TAG, "list: " + file.getPath());
字符串連接應使用一個StringBuilder來完成。使用+ =會爲每個迭代創建一個新的String對象,因爲字符串是不可變的。 – Jivings 2012-01-30 18:20:42
@Jivings膝蓋深在C#.. :)謝謝.. – 2012-02-02 16:10:17
沒問題,我仍然upvoted你的正確答案:) – Jivings 2012-02-02 16:33:25