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

当前回答

当然,要在logcat中看到结果,您应该至少将日志级别设置为“Info”(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;
        }
    }
}

是的。如果您正在使用模拟器,它将显示在系统下的Logcat视图中。标签。编写一些东西并在模拟器中进行尝试。

它没有显示在您的应用程序中…它在模拟器的logcat下

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

对我有效的解决方案:

在Logcat中。(如果尚未显示Logcat,则显示Logcat。点击查看菜单——>工具窗口——>Logcat)。它显示为System。不是像你期望的那样System.out.println。如果你还没有重新构建应用程序。

在图片中,黄色突出显示的是系统。输出“Hello again”。