¿Por qué no funciona “System.out.println” en Android?

Quiero imprimir algo en la consola, para poder depurarlo. Pero por alguna razón, no se imprime nada en mi aplicación Android.

¿Cómo depuro entonces?

public class HelloWebview extends Activity { WebView webview; private static final String LOG_TAG = "WebViewDemo"; private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new HelloWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.setWebChromeClient(new MyWebChromeClient()); webview.loadUrl("http://example.com/"); System.out.println("I am here"); } 

Corrección:

En el emulador y en la mayoría de los dispositivos, System.out.println se redirige a LogCat y se imprime usando Log.i() . Esto puede no ser cierto en versiones de Android muy antiguas o personalizadas.

Original:

No hay una consola para enviar los mensajes para que los mensajes System.out.println se pierdan. De la misma manera, esto sucede cuando ejecuta una aplicación Java “tradicional” con javaw .

En cambio, puede usar la clase de Log Android :

 Log.d("MyApp","I am here"); 

A continuación, puede ver el registro en la vista de Logcat en Eclipse o ejecutando el siguiente comando:

 adb logcat 

Es bueno acostumbrarse a mirar la salida de logcat ya que es también donde se muestran los Stack Traces de cualquier excepción no detectada.

La primera entrada a cada llamada de registro es la etiqueta de registro que identifica el origen del mensaje de registro. Esto es útil ya que puede filtrar el resultado del registro para mostrar solo sus mensajes. Para asegurarse de que es coherente con su etiqueta de registro, probablemente sea mejor definirla una vez como una static final String alguna parte.

 Log.d(MyActivity.LOG_TAG,"Application started"); 

Hay cinco métodos de una letra en el Log correspondientes a los siguientes niveles:

  • e() – Error
  • w() – Advertencia
  • i() – Información
  • d() – Depurar
  • v() – Verbose
  • wtf() – Qué terrible error

La documentación dice lo siguiente sobre los niveles :

Verbose nunca se debe comstackr en una aplicación, excepto durante el desarrollo. Los registros de depuración se comstackn pero se eliminan en tiempo de ejecución. Los registros de error, advertencia e información siempre se guardan.

Use la clase Log . Salida visible con LogCat

Sí lo hace. Si está utilizando el emulador, se mostrará en la vista de Logcat debajo de la etiqueta System.out . Escribe algo y pruébalo en tu emulador.

Por supuesto, para ver el resultado en logcat, debe establecer el nivel de registro al menos como “Información” ( Nivel de registro en logcat ); de lo contrario, como me sucedió a mí, no verás tu resultado.

No hay lugar en su teléfono que pueda leer System.out.println();

En cambio, si quiere ver el resultado de algo, mire la ventana de logcat/console o haga un Toast o una Snackbar (si está en un dispositivo más nuevo) aparecerá en la pantalla del dispositivo con el mensaje 🙂 Eso es lo que hago cuando tengo que verificar, por ejemplo, dónde va en un código de switch case ! Diviértete codificando! 🙂

si realmente necesita System.out.println para funcionar (por ejemplo, se llama desde una biblioteca de terceros). simplemente puede usar la reflexión para cambiar el campo en System.class:

 try{ Field outField = System.class.getDeclaredField("out"); Field modifiersField = Field.class.getDeclaredField("accessFlags"); modifiersField.setAccessible(true); modifiersField.set(outField, outField.getModifiers() & ~Modifier.FINAL); outField.setAccessible(true); outField.set(null, new PrintStream(new RedirectLogOutputStream()); }catch(NoSuchFieldException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } 

Clase RedirectLogOutputStream:

 public class RedirectLogOutputStream extends OutputStream{ private String mCache; @Override public void write(int b) throws IOException{ if(mCache == null) mCache = ""; if(((char) b) == '\n'){ Log.i("redirect from system.out", mCache); mCache = ""; }else{ mCache += (char) b; } } } 

System.out.println (“…”) se muestra en el monitor Android en Android Studio