Aus Debugging-Gründen möchte ich alle Extras (und deren Werte) einer Absicht auflisten. Jetzt ist es kein Problem, die Schlüssel zu bekommen
Set<String> keys = intent.getExtras().keySet();
Aber die Werte der Schlüssel zu erhalten, ist eine für mich, weil einige Werte Zeichenfolgen sind, andere boolesch ... Wie könnte ich die Werte in einer Schleife abrufen (die Schlüssel durchlaufen) und die Werte in eine Protokolldatei schreiben? Danke für jeden Hinweis!
android
android-intent
stefan.at.wpf
quelle
quelle
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Wodata
ist die Absicht? Für Android Anfänger.value = "null"
.So definiere ich die Utility-Methode, um alle Extras eines Intents zu sichern.
quelle
Sie können dies in einer Codezeile tun:
Es gibt etwas aus wie:
"#Intent; action = android.intent.action.MAIN; category = android.intent.category.LAUNCHER; launchFlags = 0x10a00000; component = com.mydomain.myapp / .StartActivity; sourceBounds = 12% 20870% 20276% 201167; l .profile = 0; end "
Am Ende dieser Zeichenfolge (der Teil, den ich fett gedruckt habe) finden Sie die Liste der Extras (in diesem Beispiel nur eine zusätzliche).
Dies geht aus der toUri-Dokumentation hervor : "Der URI enthält die Daten des Intents als Basis-URI, wobei ein zusätzliches Fragment die Aktion, Kategorien, Typen, Flags, Pakete, Komponenten und Extras beschreibt."
quelle
quelle
Die Methode get (String key) von Bundle gibt ein Objekt zurück. Am besten drehen Sie sich über den Schlüsselsatz, indem Sie get (String) für jeden Schlüssel aufrufen und toString () für das Objekt verwenden, um sie auszugeben. Dies funktioniert am besten für Grundelemente, es können jedoch Probleme mit Objekten auftreten, die kein toString () implementieren.
quelle
quelle
Ich wollte eine Möglichkeit, den Inhalt einer Absicht in das Protokoll auszugeben und ihn leicht lesen zu können. Deshalb habe ich mir Folgendes ausgedacht. Ich habe eine
LogUtil
Klasse erstellt und dann die vondumpIntent()
@Pratik erstellte Methode übernommen und ein wenig geändert. So sieht alles aus:Hoffe das hilft jemandem!
quelle
Sie können
for (String key : keys) { Object o = get(key);
ein Objekt zurückgeben, es aufrufengetClass().getName()
, um den Typ abzurufen, und dann eine Reihe von if name.equals ("String") -Typen ausführen, um herauszufinden, welche Methode Sie tatsächlich aufrufen sollten, um den Wert abzurufen ?quelle
In der Android-Quelle ist mir aufgefallen, dass fast jede Operation das Bundle zwingt, seine Daten zu entpacken. Wenn Sie dies (wie ich) häufig zum Debuggen tun müssen, können Sie Folgendes schnell eingeben:
quelle
Es tut mir leid, wenn dies zu ausführlich oder zu spät ist, aber dies war der einzige Weg, den ich finden konnte, um die Arbeit zu erledigen. Der komplizierteste Faktor war die Tatsache, dass Java keine Referenzfunktionen zum Übergeben hat. Daher benötigen die Methoden get --- Extra einen Standardwert für die Rückgabe und können einen booleschen Wert nicht ändern, um festzustellen, ob der Standardwert zufällig zurückgegeben wird. oder weil die Ergebnisse nicht günstig waren. Zu diesem Zweck wäre es schöner gewesen, wenn die Methode eine Ausnahme ausgelöst hätte, als wenn sie eine Standardeinstellung zurückgegeben hätte.
Ich habe meine Informationen hier gefunden: Android Intent Documentation .
Dokumentation festlegen
quelle
Die Kotlin-Version von Pratiks Utility-Methode, die alle Extras eines Intents enthält:
quelle
for (key in bundle.keySet())
Wenn Sie zum Debuggen nur eine Zeichenfolge benötigen (vom OP impliziert, aber nicht explizit angegeben), verwenden Sie einfach
toString
die folgenden ExtrasBundle
:Es gibt eine Zeichenfolge zurück wie:
Dokumentation: Bundle.toString () (es ist leider das Standard-
Object.toString()
Javadoc und als solches hier ziemlich nutzlos.)quelle