2012-01-30 286 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());