Java 如何在logcat for android中查看阵列

Java 如何在logcat for android中查看阵列,java,android,arrays,logcat,Java,Android,Arrays,Logcat,我想在logcat中记录原始数据,比如数组,这样我就知道输出是什么了。 假设我有一个数组。。。就像这样: File[] mp3List = ... Log.v("test", mp3List); 为什么我不能将阵列记录到控制台?我该怎么做呢?也许我误解了,但我认为这很简单: string sLog = ""; for(mp3List..) { sLog += mp3List[i].getName(); } Log.v(sLog); 不是吗?因为,我想,当您尝试打印这样的数组时,您会

我想在logcat中记录原始数据,比如数组,这样我就知道输出是什么了。 假设我有一个数组。。。就像这样:

File[] mp3List = ...
Log.v("test", mp3List);

为什么我不能将阵列记录到控制台?我该怎么做呢?

也许我误解了,但我认为这很简单:

string sLog = "";
for(mp3List..)
{
    sLog += mp3List[i].getName();
}

Log.v(sLog);
不是吗?因为,我想,当您尝试打印这样的数组时,您会得到一个日志条目,说明mp3List是一个
System.Blah.Blah.File[]


希望对您有所帮助。

如果您有一个字符串数组,只需将toString()添加到其中,它就会显示出来


对于自定义对象,应该重写toString()方法,并打印希望看到的对象。如果您有一个数组,那么将使用toString方法的输出打印该数组。

您无法记录该数组,因为它只是一个对象。LogCat不知道如何处理它或以您想要的方式显示它

如果每个文件对象都有一个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
而不是
文件[]
。Java严格执行参数类型

更新

您可以轻松地将
文件
对象中包含的信息转换为
字符串
对象。所有java对象都实现了一个
toString()
,如果我没记错的话,它将返回对象的
类名
地址
的组合。然而,这通常不包含有用的信息。因此,您需要自己定义转换

现在,将
文件[]
转换为
字符串
更为复杂,因为在数组上调用方法时,它作用于数组对象,而不是数组成员(其中包含我怀疑您关心的信息)。因此,调用
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;
}
for (int i=0; i<mp3List.legnth; i++)
    Log.v("MyTag", Integer.toString(i) + ":" + mp3List[i].getPath());
然而,这可能很难理解

我个人会这样做:

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;
}
for (int i=0; i<mp3List.legnth; i++)
    Log.v("MyTag", Integer.toString(i) + ":" + mp3List[i].getPath());

for(int i=0;i我更喜欢一行程序:


对于(File:list)Log.d(标记,“list:+File.getPath());

如果我使用toString,它将记录类似于:“Ljava.io.File;@4052eac0”的内容这对我一点帮助都没有。这就是为什么你应该在你想要打印信息的类中重写toString方法。字符串连接应该使用StringBuilder完成。使用+=为每次迭代创建一个新的字符串对象,因为字符串是不可变的。