Java 如何在logcat for android中查看阵列
我想在logcat中记录原始数据,比如数组,这样我就知道输出是什么了。 假设我有一个数组。。。就像这样: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); 不是吗?因为,我想,当您尝试打印这样的数组时,您会
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完成。使用+=为每次迭代创建一个新的字符串对象,因为字符串是不可变的。