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

2022-08-31 06:19:51

我想在控制台中打印一些东西,以便我可以调试它。但是由于某种原因,我的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");
    }

答案 1

校正:

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

源语言:

没有要将消息发送到的控制台,因此消息会丢失。以同样的方式,当您使用 运行“传统”Java应用程序时,也会发生这种情况。System.out.printlnjavaw

相反,您可以使用 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 编译到应用程序中。调试日志在 中编译,但在运行时剥离。始终保留错误、警告和信息日志。


答案 2

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


推荐