Z powodów debugowania chcę wymienić wszystkie dodatki (i ich wartości) zamiaru. Teraz zdobycie kluczy nie stanowi problemu
Set<String> keys = intent.getExtras().keySet();
ale uzyskiwanie wartości kluczy jest dla mnie jedną, ponieważ niektóre wartości są ciągami, niektóre są logiczne ... Jak mogę uzyskać wartości w pętli (pętlę między kluczami) i zapisać wartości w pliku dziennika? Dzięki za podpowiedź!
android
android-intent
stefan.at.wpf
źródło
źródło
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Gdziedata
jest zamiar. Dla początkujących Androida.value = "null"
.W ten sposób definiuję metodę użyteczności do zrzucenia wszystkich dodatków zamiaru.
źródło
Możesz to zrobić w jednym wierszu kodu:
Wyprowadza coś takiego:
"#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; koniec "
Na końcu tego ciągu (część, którą pogrubiłem) możesz znaleźć listę dodatków (tylko jeden dodatkowy w tym przykładzie).
Jest to zgodne z dokumentacją toUri : „ Identyfikator URI zawiera dane zamiaru jako podstawowy identyfikator URI, z dodatkowym fragmentem opisującym akcję, kategorie, typ, flagi, pakiet, komponent i dodatki”.
źródło
źródło
Metoda get (klucz ciągu) pakietu zwraca obiekt. Najlepiej jest obrócić zestaw kluczy, wywołując get (String) na każdym kluczu i używając toString () na Object, aby je wyprowadzić. Działa to najlepiej dla prymitywów, ale możesz napotkać problemy z obiektami, które nie implementują toString ().
źródło
źródło
Chciałem znaleźć sposób, aby wypisać zawartość intencji do dziennika i móc ją łatwo odczytać, więc oto, co wymyśliłem. Stworzyłem
LogUtil
klasę, a następnie wziąłemdumpIntent()
metodę @Pratik i nieco ją zmodyfikowałem. Oto jak to wszystko wygląda:Mam nadzieję, że to komuś pomoże!
źródło
Możesz użyć,
for (String key : keys) { Object o = get(key);
aby zwrócić obiekt, wywołaćgetClass().getName()
go, aby uzyskać typ, a następnie wykonać zestaw typów if name.equals („String”), aby ustalić, którą metodę powinieneś wywołać, aby uzyskać wartość ?źródło
Zauważyłem w źródle Androida, że prawie każda operacja zmusza pakiet do rozpakowywania danych. Jeśli więc (tak jak ja) musisz to robić często w celu debugowania, bardzo szybko wpisz poniżej:
źródło
Przepraszam, jeśli jest to zbyt szczegółowe lub spóźnione, ale to był jedyny sposób, w jaki mogłem znaleźć rozwiązanie. Najbardziej skomplikowanym czynnikiem był fakt, że java nie ma funkcji przekazywania przez referencje, więc metody get --- Extra wymagają wartości domyślnej do zwrócenia i nie mogą modyfikować wartości boolowskiej, aby stwierdzić, czy wartość domyślna jest zwracana przypadkowo, lub ponieważ wyniki nie były korzystne. W tym celu fajniej byłoby, gdyby metoda zgłosiła wyjątek, niż gdyby zwróciła wartość domyślną.
Moje informacje znalazłem tutaj: Dokumentacja intencji Androida .
Ustaw dokumentację
źródło
Wersja narzędziowa Pratik firmy Kotlin, która zrzuca wszystkie dodatki zamiaru:
źródło
for (key in bundle.keySet())
Jeśli do debugowania wszystko, czego potrzebujesz, to ciąg znaków (coś, co sugeruje OP, ale nie zostało to wyraźnie określone), po prostu użyj
toString
dodatkówBundle
:Zwraca ciąg taki jak:
Dokumentacja: Bundle.toString () (niestety jest to domyślny
Object.toString()
javadoc i jako taki całkiem bezużyteczny tutaj).źródło