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

当前回答

最近我在Android Studio 3.3中发现了同样的问题。我关闭了其他Android工作室项目,Logcat开始工作。上面这个公认的答案根本不符合逻辑。

其他回答

如果你真的需要System.out.println工作(例如。它是从第三方库调用的)。你可以简单地使用反射来更改System.class中的out字段:

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

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

使用Log类。输出与LogCat可见

当然,要在logcat中看到结果,您应该至少将日志级别设置为“Info”(logcat中的日志级别);否则,就像我遇到的那样,您将看不到您的输出。

System.out.println("…")会显示在Android Studio的Android Monitor上

你的手机上没有地方可以读取System.out.println();

相反,如果你想查看某些结果,要么查看你的logcat/控制台窗口,要么让Toast或Snackbar(如果你在较新的设备上)出现在设备的屏幕上,并显示消息:) 这就是我所做的,当我必须检查例如它在开关情况代码!祝你编码愉快!:)