我想在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