一尘不染

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

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

阅读 576

收藏
2020-03-01

共1个答案

一尘不染

在仿真器上,大多数设备System.out.println都重定向到LogCat并使用进行打印Log.i()。在非常旧的或自定义的Android版本上可能并非如此。

原版的:

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

相反,你可以使用Android Log类:

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

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

adb logcat

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

55.png

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

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

有五个单字母方法分别Log对应于以下级别:

  • e() - Error
  • w() - Warning
  • i() - Information
  • d() - Debug
  • v() - Verbose
  • wtf() - What a Terrible Failure
2020-03-01