为什么“System.out.println”在 Android 中不起作用?

新手上路,请多包涵

我想在控制台中打印一些东西,以便我可以调试它。但出于某种原因,我的 Android 应用程序中没有打印任何内容。

那我该如何调试呢?

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

原文由 TIMEX 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 946
2 个回答

更正:

在模拟器和大多数设备上 System.out.println 被重定向到 LogCat 并使用 Log.i() 打印。这在非常旧的或自定义的 Android 版本上可能并非如此。

原来的:

没有可向其发送消息的控制台,因此 System.out.println 消息丢失了。当您使用 javaw 运行“传统”Java 应用程序时,也会发生这种情况。

相反,您可以使用 Android Log

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

然后,您可以在 Eclipse 的 Logcat 视图中或通过运行以下命令来查看日志:

 adb logcat

最好养成查看 logcat 输出的习惯,因为这也是显示任何未捕获异常的堆栈跟踪的地方。

每个日志记录调用的第一个条目是标识日志消息来源的日志标记。这很有用,因为您可以过滤日志的输出以仅显示您的消息。为确保您与日志标记一致,最好将其定义为 static final String 某处。

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

Log 中一共有五个单字母方法,分别对应以下等级:

  • e() - 错误
  • w() - 警告
  • i() - 信息
  • d() 调试
  • v() - 详细
  • wtf() - 多么可怕的失败

文档说明了以下有关级别的信息

除非在开发期间,否则不应将 Verbose 编译到应用程序中。调试日志被编译但在运行时被剥离。始终保留错误、警告和信息日志。

原文由 David Webb 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 日志类。使用 LogCat 可见输出

原文由 Maurits Rijk 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题