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

TIM*_*MEX 185 java printing console android system

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

Dav*_*ebb 204

更正:

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

原版的:

没有控制台可以发送消息,因此System.out.println消息会丢失.以同样的方式运行"传统"Java应用程序时会发生这种情况javaw.

相反,您可以使用Android Log:

Log.d("MyApp","I am here");
Run Code Online (Sandbox Code Playgroud)

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

adb logcat
Run Code Online (Sandbox Code Playgroud)

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

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

Log.d(MyActivity.LOG_TAG,"Application started");
Run Code Online (Sandbox Code Playgroud)

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

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

文件说,有关水平以下:

除了在开发期间,不应该将详细编译到应用程序中.调试日志在运行时编译但被剥离.始终保留错误,警告和信息日志.

  • 实际上 - System.out通过Log.i()打印到LogCat. (29认同)
  • 还有Log.wtf():-) (9认同)
  • @JosephEarl - 随意使用"编辑"按钮. (7认同)
  • System.out.println确实在Android Studio中的Android Monitor下显示.这些显示为"I/System.out" (2认同)

Mau*_*ijk 18

使用 Log类.使用LogCat可见输出


kau*_*man 12

是的,它确实.如果您正在使用模拟器,它将显示在System.out标记下的Logcat视图中.写一些东西,然后在你的模拟器中试一试.

  • 除此答案外,还请记住,有时“某事发生”,并且使用System.out的使用不会打印任何输入。如果是这种情况,请尝试关闭并重新启动仿真器。这对我有用。 (2认同)