デバッグできるように、コンソールに何かを印刷したい。しかし、何らかの理由で、私の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");
}
修正:
エミュレータおよびほとんどのデバイスでは、System.out.println
はLogCatにリダイレクトされ、Log.i()
を使用して出力されます。これは、非常に古いバージョンまたはカスタムAndroidバージョンでは当てはまらない場合があります。
オリジナル:
メッセージを送信するコンソールがないため、System.out.println
メッセージは失われます。同じように、javaw
を指定して「従来の」Javaアプリケーションを実行すると、これが起こります。
代わりに、 Android Log
class を使用できます。
Log.d("MyApp","I am here");
その後、EclipseのLogcatビューでログを表示するか、次のコマンドを実行します。
adb logcat
Logcatの出力を確認する習慣を身に付けるのは良いことです。これは、キャッチされていない例外のスタックトレースも表示される場所です。
すべてのロギングコールへの最初のエントリは、ログメッセージのソースを識別するログタグです。これは、ログの出力をフィルタリングしてメッセージだけを表示できるため便利です。ログタグと一貫性を保つために、おそらくどこかでstatic final String
として一度定義することをお勧めします。
Log.d(MyActivity.LOG_TAG,"Application started");
Log
には、次のレベルに対応する1文字のメソッドが5つあります。
e()
-エラーw()
-警告i()
-情報d()
-デバッグv()
-詳細wtf()
-なんというひどい失敗開発中を除いて、冗長をアプリケーションにコンパイルしないでください。デバッグログはコンパイルされますが、実行時に削除されます。エラー、警告、および情報ログは常に保持されます。
ログクラス を使用します。 LogCatで表示される出力
はい、そうです。エミュレータを使用している場合、System.out
タグの下のLogcatビューに表示されます。何かを書いて、エミュレータで試してください。
もちろん、logcatで結果を表示するには、少なくとも「Info」にログレベルを設定する必要があります( logcatのログレベル );そうしないと、偶然にも、出力が表示されません。
本当にSystem.out.printlnが必要な場合(たとえば、サードパーティライブラリから呼び出されます)。単にリフレクションを使用してSystem.classのフィールドを変更できます。
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の下にあります
あなたの電話にはSystem.out.println();
を読むことができる場所がありません
代わりに、何かの結果を見たい場合は、logcat/console
ウィンドウを見るか、Toast
またはSnackbar
(新しいデバイスを使用している場合)をデバイスの画面にメッセージとともに表示します:) switch case
コードのどこにあるかを確認する必要があります!コーディングを楽しんでください! :)
System.out.println( "...")は、Android StudioのAndroidモニターに表示されます。
これは、メインスレッドがSystem.out.println
にできないことに関するものであったため、さらに訪問者のために残しておきます。
public class LogUtil {
private static String log = "";
private static boolean started = false;
public static void print(String s) {
//Start the thread unless it's already running
if(!started) {
start();
}
//Append a String to the log
log += s;
}
public static void println(String s) {
//Start the thread unless it's already running
if(!started) {
start();
}
//Append a String to the log with a newline.
//NOTE: Change to print(s + "\n") if you don't want it to trim the last newline.
log += (s.endsWith("\n") )? s : (s + "\n");
}
private static void start() {
//Creates a new Thread responsible for showing the logs.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
//Execute 100 times per second to save CPU cycles.
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//If the log variable has any contents...
if(!log.isEmpty()) {
//...print it and clear the log variable for new data.
System.out.print(log);
log = "";
}
}
}
});
thread.start();
started = true;
}
}
使用法:LogUtil.println("This is a string");