【发布时间】:2012-02-22 12:31:56
【问题描述】:
我想在我的 logcat 中记录像数组这样的原始数据,所以我知道输出是什么。 假设我有一个数组......就像这样:
File[] mp3List = ...
Log.v("test", mp3List);
为什么我不能将阵列记录到控制台?我该怎么做?
【问题讨论】:
标签: java android arrays logcat
我想在我的 logcat 中记录像数组这样的原始数据,所以我知道输出是什么。 假设我有一个数组......就像这样:
File[] mp3List = ...
Log.v("test", mp3List);
为什么我不能将阵列记录到控制台?我该怎么做?
【问题讨论】:
标签: java android arrays logcat
您无法记录该数组,因为它只是一个对象。 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和对象所在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());
它更简单,产生更清晰的日志消息,并且更容易理解作为程序员正在发生的事情。
【讨论】:
如果你有一个字符串数组,你可以添加 toString() 到它,它就会被显示出来。
对于自定义对象,您应该覆盖 toString() 方法并打印您想为该对象看到的内容。如果你有一个数组,该数组将与 toString 方法的输出一起打印。
【讨论】:
也许我误解了,但我认为它很简单:
string sLog = "";
for(mp3List..)
{
sLog += mp3List[i].getName();
}
Log.v(sLog);
不是吗?因为,我想,当你尝试打印这样的数组时,你会得到一个日志条目,说 mp3List 是一个 System.Blah.Blah.File[] ..
希望对你有帮助..
【讨论】:
我更喜欢一个班轮:
for(File file:list) Log.d(TAG, "list: " + file.getPath());
【讨论】: