2012-01-30 12 views
9

Vorrei registrare i dati grezzi come array nel mio logcat, quindi so qual è l'output. Diciamo che ho un allineamento ... così:come vedere un array in logcat per Android

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

Perché non posso fare il login matrice per console? Come posso farlo?

risposta

10

Il motivo per cui questo non funziona è semplicemente perché il secondo argomento di Log.v è un String non è un File[]. Java applica rigorosamente i tipi di argomenti.

Aggiornamento:

Si può facilmente trasformare le informazioni contenute un oggetto File in un oggetto String. Tutti gli oggetti java implementano un toString(), che, se ricordo, restituisce correttamente una combinazione di ClassName e l'oggetto address dell'oggetto. Tuttavia questo di solito non contiene informazioni utili. Quindi è necessario definire la conversione da soli.

Adesso convertire da File[] a String è più complicato perché quando si chiama un metodo su un array, esso funziona sull'oggetto di matrice piuttosto che sui membri di un array (che contiene le informazioni che sospetto ti interessino). Pertanto chiamando mp3List.toString() verrà restituita una stringa singola che descrive l'oggetto dell'array e non le informazioni contenute nell'array.

Quindi probabilmente si vorrà scrivere un metodo come questo:

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

e quindi chiamare a rendere la vostra chiamata registro come segue:

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

Tuttavia, questo potrebbe essere difficile da leggere.

io personalmente sarebbe fare in questo modo:

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

La sua più semplici, produce messaggi di log più pulite ed è più facile da capire che cosa sta succedendo come programmatore.

0

Forse ho capito male, ma penso che la sua semplicemente:

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

Log.v(sLog); 

isnt esso? Perché, suppongo, quando si tenta di stampare una serie del genere si otterrà una voce di registro dicendo che mp3List è un System.Blah.Blah.File[] ..

Speranza che aiuta ..

+3

concatenazione di stringhe deve essere fatto utilizzando uno StringBuilder. Usare + = crea un nuovo oggetto stringa per ogni iterazione perché le stringhe sono immutabili. – Jivings

+0

@Jivings ginocchio in profondità in C# .. :) grazie .. –

+0

Nessun problema, ho ancora votato per la risposta corretta :) – Jivings

1

Se si dispone di un array di stringhe, è possibile aggiungi toString() ad esso e verrà visualizzato.

Per gli oggetti personalizzati, è necessario sovrascrivere il metodo toString() e stampare ciò che si desidera vedere per quell'oggetto. Se si dispone di un array, la matrice verrà stampata con l'output del metodo toString.

+0

Se uso toString, registrerà qualcosa come: "Ljava.io.File; @ 4052eac0" che in realtà non mi aiuta affatto –

+0

Ecco perché è necessario sovrascrivere il metodo toString della classe di cui si desidera stampare le informazioni. –

14

Non è possibile registrare l'array perché è solo un oggetto. LogCat non ha idea di come affrontarlo o visualizzarlo nel modo desiderato.

Se ogni oggetto File ha un metodo toString() che visualizza le informazioni che si desidera è possibile utilizzare:

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

altrimenti dovrete per concatenare la propria stringa di accedere:

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

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

mi piace uno fodere migliori:

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

Problemi correlati