【问题标题】:how see an array in logcat for android如何在 Android 的 logcat 中查看数组
【发布时间】:2012-02-22 12:31:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android arrays logcat


    【解决方案1】:

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

    如果每个 File 对象都有一个 toString() 方法来显示您想要使用的信息:

    Log.v(Arrays.toString(mp3List));

    否则你必须连接你自己的字符串来记录:

    StringBuilder sb = new StringBuilder();
    for(File f : mp3List) {
      sb.append(f.getName());
    }
    
    Log.v(sb.toString());
    

    【讨论】:

      【解决方案2】:

      这不起作用的原因仅仅是因为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());
      

      它更简单,产生更清晰的日志消息,并且更容易理解作为程序员正在发生的事情。

      【讨论】:

        【解决方案3】:

        如果你有一个字符串数组,你可以添加 toString() 到它,它就会被显示出来。

        对于自定义对象,您应该覆盖 toString() 方法并打印您想为该对象看到的内容。如果你有一个数组,该数组将与 toString 方法的输出一起打印。

        【讨论】:

        • 如果我使用 toString,它会记录类似:"Ljava.io.File;@4052eac0" 这对我没有任何帮助。
        • 这就是为什么你应该重写你想要打印信息的类中的 toString 方法。
        【解决方案4】:

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

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

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

        希望对你有帮助..

        【讨论】:

        • 字符串连接应该使用 StringBuilder 来完成。使用 += 为每次迭代创建一个新的字符串对象,因为字符串是不可变的。
        【解决方案5】:

        我更喜欢一个班轮:

        for(File file:list) Log.d(TAG, "list: " + file.getPath());

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-21
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 2011-01-01
          • 1970-01-01
          相关资源
          最近更新 更多