2012-01-30 24 views
9

Me gustaría registrar datos sin procesar como matrices en mi logcat, así que sé cuál es el resultado. Digamos que tengo una gran variedad ... de esa manera:cómo ver una matriz en logcat para Android

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

Por qué no puedo simplemente ingrese la matriz a la consola? ¿Cómo puedo hacerlo?

Respuesta

10

La razón por la que esto no funciona es simplemente porque el segundo argumento de Log.v es un String no es un File[]. Java aplica estrictamente tipos de argumentos.

actualización:

Usted puede transformar fácilmente la información contenida File un objeto en un objeto String. Todos los objetos java implementan un toString(), que si recuerdo correctamente devuelve una combinación del ClassName y el address del objeto está ubicado. Sin embargo, esto generalmente no contiene información útil. Por lo tanto, debe definir la conversión usted mismo.

Ahora convertir de File[] a String es más complicado ya que cuando se llama a un método en una matriz funciona en el objeto de matriz en lugar de a los miembros de una matriz (que contiene la información Sospecho que te importa). Entonces, al llamar al mp3List.toString() se devolverá una sola cadena que describa el objeto de la matriz y no la información contenida en la matriz.

Así que es probable que desee escribir un método como este:

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; 
} 

Y entonces llamada que hace el registro de llamadas de la siguiente manera:

Log.v("MyTag", fileArraytoString(mp3List); 

Sin embargo, esto podría ser difícil de leer.

yo personalmente lo haría así:

for (int i=0; i<mp3List.legnth; i++) 
    Log.v("MyTag", Integer.toString(i) + ":" + mp3List[i].getPath()); 

Su más simples, produce mensajes de registro más limpia y es más fácil de entender lo que está pasando como programador.

0

Tal vez no he entendido bien, pero creo que es simplemente:

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

Log.v(sLog); 

no creen? Porque, supongo, cuando intenta imprimir una matriz como la que obtendrá una entrada de registro diciendo que es un mp3List System.Blah.Blah.File[] ..

creo que sirve ..

+3

concatenación de cadenas se debe hacer uso de un StringBuilder. Usar + = crea un nuevo objeto de cadena para cada iteración porque las cadenas son inmutables. – Jivings

+0

@Jivings hasta la rodilla en C# .. :) gracias .. –

+0

No hay problema, aún así le he votado positivamente por la respuesta :) – Jivings

1

Si tiene una matriz de cadenas, se puede simplemente agregue aString() y se mostrará.

Para objetos personalizados, debe anular el método toString() e imprimir lo que desea ver para ese objeto. Si tiene una matriz, la matriz se imprimirá con el resultado del método toString.

+0

Si uso toString, se registrará algo así como: "Ljava.io.File; @ 4052eac0" que realmente no me ayuda en absoluto. –

+0

Es por eso que debe anular el método toString en su clase de la cual desea imprimir la información. –

14

No puede registrar la matriz porque es solo un Objeto. LogCat no tiene idea de cómo lidiar con él o mostrarlo de la manera que desee.

Si cada objeto File tiene un método toString() que muestra la información que se desea se puede usar:

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

de lo contrario tendrá concatenar su propia cadena para iniciar la sesión:

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

Log.v(sb.toString()); 
0

me gusta trazadores de líneas uno mejor:

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

Cuestiones relacionadas