Почему бы и нет " системы.из.println " работа в 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");
}
7 ответов:
устранение:
На эмуляторе и большинстве устройств
System.out.printlnперенаправляется на LogCat и печатается с помощьюLog.i(). Это может быть не так на очень старых или пользовательских версиях Android.Оригинал:
Там нет консоли для отправки сообщений, так что
System.out.printlnсообщения теряются. Точно так же это происходит, когда вы запускаете "традиционное" приложение Java сjavaw.вместо этого вы можете использовать Android
Logкласс:Log.d("MyApp","I am here");вы можете просмотреть журнал либо в Logcat посмотреть в Eclipse, или выполнив следующую команду:
adb logcatэто хорошо, чтобы войти в привычку смотреть на выход logcat, как это также, где отображаются следы стека любых неперехваченных исключений.
первая запись в каждом вызове журнала является тегом журнала, который идентифицирует источник сообщения журнала. Это полезно, Так как вы можете отфильтровать вывод журнала, чтобы показать только ваши сообщения. Чтобы убедиться, что вы согласуетесь с тегом журнала, вероятно, лучше всего определить его один раз как
static final Stringкуда-то.Log.d(MyActivity.LOG_TAG,"Application started");есть пять однобуквенных методов в
Logсоответствует следующим уровням:
e()ошибкаw()предупрежденияi()- Информацияd()- Debugv()- многословныйwtf()- какой ужасный провалThe документация говорит следующее об уровнях:
подробный никогда не должен быть скомпилирован в приложение, кроме как во время разработки. Журналы отладки компилируются, но удаляются во время выполнения. Журналы ошибок, предупреждений и информации всегда хранятся.
использовать Log class. Вывод виден с помощью LogCat
Да, это делает. Если вы используете эмулятор, он будет отображаться в представлении Logcat под
System.outтег. Напишите что-нибудь и попробуйте в своем эмуляторе.
конечно, чтобы увидеть результат в logcat, вы должны установить уровень журнала по крайней мере на" Info" (уровень журнала в logcat); в противном случае, как это случилось со мной, вы не увидите свой выход.
там нет места на вашем телефоне, что вы можете прочитать
System.out.println();вместо этого, если вы хотите увидеть результат чего-то либо посмотрите на ваш
Если вам действительно нужна система.из.println для работы(например. это называется из сторонней библиотеки). вы можете просто использовать отражение, чтобы изменить поле в системе.класс:
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; } } }
