我想在我的logcat中记录原始数据,例如数组,这样我就知道输出是什么。 假设我有一个数组...就像这样:
File[] mp3List = ...
Log.v("test", mp3List);
为什么我不能在控制台直接记录数组?我该如何做到?
你无法记录数组,因为它只是一个对象。LogCat不知道如何处理它或以你想要的方式显示它。
如果每个File对象都有一个显示你想要信息的toString()方法,你可以使用:
Log.v(Arrays.toString(mp3List));
否则,你必须自己拼接字符串来记录:
StringBuilder sb = new StringBuilder();
for(File f : mp3List) {
sb.append(f.getName());
}
Log.v(sb.toString());
Log.v
的第二个参数是一个 String
而不是一个 File[]
。Java 严格执行参数类型。
更新:
你可以很容易地将包含在 File
对象中的信息转换为 String
对象。所有 Java 对象都实现了 toString()
方法,如果我没记错的话,它会返回对象的 ClassName
和地址的组合。但通常这并没有包含有用的信息。所以你需要自己定义转换方式。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());
它更简单,产生更干净的日志信息,并且作为程序员更容易理解正在发生的情况。
我更喜欢一行代码:
for(File file:list) Log.d(TAG, "list: " + file.getPath());
也许我误解了,但我认为它很简单:
string sLog = "";
for(mp3List..)
{
sLog += mp3List[i].getName();
}
Log.v(sLog);
不是吗?因为我猜当你尝试像那样打印一个数组时,你会得到一个日志条目,说mp3List是一个System.Blah.Blah.File[]
..
希望能有所帮助。