Questo sito utilizza i Cookie. Clicca su Accetto per consentirne l'utilizzo, altrimenti in Info trovi maggiori informazioni.

Ottenere Classe, Metodo e Linea di Codice in un'applicazione Android

 







 

Questo breve articolo è per condividere un metodo per ottenere una stringa che contenga il nome della classe (eventualmente comprendente il Package), il metodo e la linea di codice in cui ci troviamo quando invochiamo il metodo.

Questa stringa, che poi può essere formattata come meglio si crede, è molto utile per esser utilizzata nei messaggi di Log, ma potrebbe andar bene per qualsiasi altro utilizzo!

 

Per creare questa stringa è conveniente utilizzare un metodo statico in una classe final che può essere importata poi nei nostri progetti e riutilizzata. Andiamo a definire ed analizzare questa classe.

 

Classe DebugInfo

La classe DebugInfo è stata dichiarata final in modo che non possa essere estesa e ha un costruttore che solleva semplicemente un AssertionError che restituisce una frase che indica che questa classe non è fatta per creare delle istanze, ma solo per contenere dei metodi statici di utilità.

Ma ecco il codice:

 

 

package com.example.android.apps.nomeApp.nomeSottoPackageUtility;
/**
 * This is a final class that we use to manage the constants of our application
 * 
 * @author Luca Bortolotti
 * @version 1.0 - Agosto 2014
 *
 */
public final class DebugInfo {
	private DebugInfo() {
		throw new AssertionError(
				"Never instantiate me! I'm only a Debug Info class!");
	}
	/**
	 * This static method return Class, Method and Line information
	 * 
	 * @param stack
	 *            as Throwable
	 * @return infoString as String formatted in this way:
	 *         "[Class].[Method].[line]: "
	 */
	public static String getClassMethodLine(Throwable stack) {
		StackTraceElement[] trace = stack.getStackTrace();
		// Get the class name with all the package
		String className = trace[0].getClassName();
		// Split and save only the class name
		className = className.substring(className.lastIndexOf('.') + 1);
		//return the infoString
		return className + "." + trace[0].getMethodName() + "."
				+ trace[0].getLineNumber() + ": ";
	}
	/**
	 * This static method return Class, Method and Line information
	 * 
	 * @param stack
	 *            as Throwable
	 * @return infoString as String formatted in this way: "[Class].[Method]: "
	 */
	public static String getClassMethod(Throwable stack) {
		StackTraceElement[] trace = stack.getStackTrace();
		// Get the class name with all the package
		String className = trace[0].getClassName();
		// Split and save only the class name
		className = className.substring(className.lastIndexOf('.') + 1);
		// return the infoString
		return className + "." + trace[0].getMethodName() + ": ";
	}
}

 

 

 

Come si nota, i metodi ottengono attraverso l'elemento Throwable stack un array StackTraceElement di nome trace da cui vengono estratte le informazioni volute:

  • Il nome della classe comprensivo di Package che io ho preferito troncare al SimpleName della classe per questioni di spazio nei Log, ma che potete conservare per esteso
  • Il nome del methodo che ha sollevato il Throwable
  • Il numero della linea di codice in cui questo Throwable è stato sollevato; nel secondo metodo questo valore non compare in quanto non sempre potrebbe essere necessario

 

 

Utilizzo dei metodi

 

Per utilizzare i seguenti metodi, vi farò l'esempio in un messaggio di Log, è sufficiente richiamarli passandogli come parametro un Throwable appena creato con new:

 

Log.i("TAG_LOG_MSG",DebugInfo.getClassMethodLine(new Throwable) + 
"qui possiamo scrivere il messaggio di Log localizzato dal metodo precedentemente 
invocato");

 

 

Con la riga di codice qui sopra otterremo in LogCat il seguente risultato (supponendo di aver inserito il messaggio di Log nella MainActivity e più precisamente nel metodo OnCreate() alla linea 20):

 

 

MainActivity.OnCreate.20:  qui possiamo scrivere il messaggio di Log localizzato dal metodo precedentemente invocato

 

 





Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.