Je veux imprimer quelque chose dans la console, afin de pouvoir le déboguer. Mais pour une raison quelconque, rien ne s'imprime dans mon application Android.
Comment déboguer alors?
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");
}
Réponses:
Correction:
Sur l'émulateur et la plupart des appareils
System.out.println
sont redirigés vers LogCat et imprimés à l'aide deLog.i()
. Cela peut ne pas être vrai sur les versions Android très anciennes ou personnalisées.Original:
Il n'y a pas de console à laquelle envoyer les messages afin que les
System.out.println
messages soient perdus. De la même manière, cela se produit lorsque vous exécutez une application Java "traditionnelle" avecjavaw
.Au lieu de cela, vous pouvez utiliser la classe Android
Log
:Log.d("MyApp","I am here");
Vous pouvez ensuite afficher le journal soit dans la vue Logcat dans Eclipse, soit en exécutant la commande suivante:
Il est bon de prendre l'habitude de regarder la sortie de logcat car c'est également là que les traces de pile de toutes les exceptions non interceptées sont affichées.
La première entrée à chaque appel de journalisation est la balise de journal qui identifie la source du message de journal. Ceci est utile car vous pouvez filtrer la sortie du journal pour n'afficher que vos messages. Pour vous assurer que vous êtes cohérent avec votre étiquette de journal, il est probablement préférable de la définir une fois comme
static final String
quelque part.Log.d(MyActivity.LOG_TAG,"Application started");
Il existe cinq méthodes à une lettre
Log
correspondant aux niveaux suivants:e()
- Erreurw()
- Attentioni()
- Informationd()
- Déboguerv()
- Verbeuxwtf()
- Quel terrible échecLa documentation dit ce qui suit sur les niveaux :
la source
Utilisez la classe Log . Sortie visible avec LogCat
la source
Oui. Si vous utilisez l'émulateur, il s'affichera dans la vue Logcat sous la
System.out
balise. Écrivez quelque chose et essayez-le dans votre émulateur.la source
Bien sûr, pour voir le résultat dans logcat, vous devez définir le niveau de journal au moins sur "Info" ( niveau de journal dans logcat ); sinon, comme cela m'est arrivé, vous ne verrez pas votre sortie.
la source
si vous avez vraiment besoin de System.out.println pour fonctionner (par exemple, il est appelé depuis une bibliothèque tierce). vous pouvez simplement utiliser la réflexion pour changer le champ dans 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(); }
Classe 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; } } }
la source
il n'est pas affiché dans votre application ... c'est sous le logcat de votre émulateur
la source
Il n'y a aucun endroit sur votre téléphone où vous pouvez lire
System.out.println();
Au lieu de cela, si vous voulez voir le résultat de quelque chose, regardez votre
logcat/console
fenêtre ou faites apparaître unToast
ou unSnackbar
(si vous êtes sur un appareil plus récent) sur l'écran de l'appareil avec le message :) C'est ce que je fais quand je dois vérifier par exemple où ça va dans unswitch case
code! Amusez-vous à coder! :)la source
Android Monitor
et puislogcat
, je vois beaucoup de messages constamment imprimés ... Est-ce censé être comme ça? Alors, comment verrais-je mes propres messages de débogage?System.out.println ("...") s'affiche sur le moniteur Android dans Android Studio
la source
Je vais laisser cela à d'autres visiteurs car pour moi, c'était quelque chose à propos du fil principal qui était incapable de le faire
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; } }
Usage:
LogUtil.println("This is a string");
la source
Je n'ai pas d'IDE sophistiqué pour utiliser LogCat car j'utilise un IDE mobile.
J'ai dû utiliser diverses autres méthodes et j'ai les classes et les utilitaires que vous pouvez utiliser si vous en avez besoin.
classe jav.android.Msg. Possède une collection de méthodes statiques. A: méthodes d'impression de TOASTS android. B: méthodes pour ouvrir une boîte de dialogue. Chaque méthode nécessite un contexte valide. Vous pouvez définir le contexte par défaut.
Une manière plus ambitieuse, une console Android. Vous instanciez un handle vers la console dans votre application, ce qui déclenche la console (si elle est installée), et vous pouvez écrire dans la console. J'ai récemment mis à jour la console pour implémenter l'entrée de lecture de la console. Ce qui ne revient pas tant que l'entrée n'est pas reçue, comme une console ordinaire. R: Téléchargez et installez Android Console (obtenez-le de moi) B: Un fichier java est livré avec (jav.android.console.IConsole). Placez-le dans le répertoire approprié. Il contient les méthodes pour utiliser la console Android. C: Appelez le constructeur qui termine l'initialisation. D: lisez <*> et écrivez la console. Il y a encore du travail à faire. À savoir, comme OnServiceConnected n'est pas appelé immédiatement, vous ne pouvez pas utiliser IConsole dans la même fonction que vous l'avez instanciée.
Avant de créer la console Android, j'ai créé la boîte de dialogue Console, qui était une boîte de dialogue fonctionnant dans la même application pour ressembler à une console. Pro: pas besoin d'attendre OnServiceConnected pour l'utiliser. Con: Lorsque l'application se bloque, vous ne recevez pas le message qui a planté l'application.
Étant donné que la console Android est une application distincte dans un processus distinct, si votre application se bloque, vous pourrez certainement voir l'erreur. De plus, IConsole définit un gestionnaire d'exceptions non interceptées dans votre application au cas où vous n'aimeriez pas la gestion des exceptions. Il imprime à peu près les traces de pile et les messages d'exception dans la console Android. Enfin, si la console Android tombe en panne, elle vous envoie son stacktrace et ses exceptions et vous pouvez choisir une application pour la lire. En fait, AndroidConsole n'est pas obligé de planter.
Modifier les extras J'ai remarqué que mon alors APK Builder n'a pas de LogCat; AIDE le fait. Ensuite, j'ai réalisé un pro de l'utilisation de ma console Android de toute façon.
La console Android est conçue pour n'occuper qu'une partie de l'écran, afin que vous puissiez voir à la fois votre application et les données émises par votre application vers la console. Cela n'est pas possible avec AIDE. Je veux donc toucher l'écran et voir les coordonnées, la console Android rend cela facile.
La console Android est conçue pour apparaître lorsque vous y écrivez.
La console Android se masquera lorsque vous rétro-appuyez.
la source
Récemment, j'ai remarqué le même problème dans Android Studio 3.3. J'ai fermé les autres projets de studio Android et Logcat a commencé à travailler. La réponse acceptée ci-dessus n'est pas du tout logique.
la source