Untuk alasan debugging, saya ingin membuat daftar semua ekstra (dan nilainya) dari Intent. Sekarang, mendapatkan kunci bukanlah masalah
Set<String> keys = intent.getExtras().keySet();
tetapi mendapatkan nilai-nilai kunci adalah satu untuk saya, karena beberapa nilai adalah string, beberapa boolean ... Bagaimana saya bisa mendapatkan nilai-nilai dalam satu lingkaran (perulangan melalui kunci) dan menulis nilai-nilai ke logfile? Terima kasih atas petunjuknya!
android
android-intent
stefan.at.wpf
sumber
sumber
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Dimanadata
Intent. Untuk pemula android.value = "null"
.Ini adalah bagaimana saya mendefinisikan metode utilitas untuk membuang semua ekstra suatu Intent.
sumber
Anda dapat melakukannya dalam satu baris kode:
Ini menghasilkan sesuatu seperti:
"#Intent; action = android.intent.action.MAIN; kategori = android.intent.category.LAUNCHER; launchFlags = 0x10a00000; komponen = com.mydomain.myapp / .StartActivity; sourceBounds = 12% 20870% 20276% 201167; l . profil = 0; end "
Di akhir string ini (bagian yang saya cetak tebal) Anda dapat menemukan daftar ekstra (hanya satu tambahan dalam contoh ini).
Ini sesuai dengan dokumentasi toUri : "URI berisi data Intent sebagai URI dasar, dengan fragmen tambahan yang menjelaskan tindakan, kategori, jenis, bendera, paket, komponen, dan ekstra."
sumber
sumber
Metode get (String key) dari Bundle mengembalikan Object. Taruhan terbaik Anda adalah dengan memutar set kunci get get (String) pada setiap kunci dan menggunakan toString () pada Object untuk menampilkannya. Ini akan bekerja paling baik untuk primitif, tetapi Anda mungkin mengalami masalah dengan Objek yang tidak menerapkan toString ().
sumber
sumber
Saya ingin cara untuk menampilkan isi maksud ke log, dan untuk dapat membacanya dengan mudah, jadi inilah yang saya buat. Saya telah membuat
LogUtil
kelas, dan kemudian mengambildumpIntent()
metode yang dibuat @Pratik, dan memodifikasinya sedikit. Begini tampilannya:Semoga ini bisa membantu seseorang!
sumber
Anda dapat menggunakan
for (String key : keys) { Object o = get(key);
untuk mengembalikan Obyek, memanggilnyagetClass().getName()
untuk mendapatkan jenis, dan kemudian melakukan set if name.equals ("String") ketik hal-hal untuk mengetahui metode mana yang Anda seharusnya panggil, untuk mendapatkan nilai ?sumber
Saya perhatikan di sumber Android bahwa hampir setiap operasi memaksa Bundle untuk menghapus data. Jadi jika (seperti saya) yang perlu Anda lakukan ini sering untuk keperluan debugging, di bawah ini sangat cepat untuk mengetik:
sumber
Maaf jika ini terlalu bertele-tele atau terlambat, tetapi ini adalah satu-satunya cara saya dapat menemukan untuk menyelesaikan pekerjaan. Faktor yang paling menyulitkan adalah fakta bahwa java tidak memiliki fungsi referensi, jadi metode get --- memerlukan default untuk kembali dan tidak dapat mengubah nilai boolean untuk mengetahui apakah nilai default dikembalikan secara kebetulan, atau karena hasilnya tidak menguntungkan. Untuk tujuan ini, akan lebih baik untuk memiliki metode meningkatkan pengecualian daripada mengembalikannya default.
Saya menemukan informasi saya di sini: Dokumentasi Intent Android .
Atur Dokumentasi
sumber
Versi Kotlin dari metode utilitas Pratik yang membuang semua ekstra dari Intent:
sumber
for (key in bundle.keySet())
Jika untuk debugging semua yang Anda inginkan adalah string (semacam tersirat oleh OP tetapi tidak secara eksplisit dinyatakan), cukup gunakan
toString
pada ekstraBundle
:Ini mengembalikan string seperti:
Dokumentasi: Bundle.toString () (sayangnya ini adalah
Object.toString()
javadoc default dan karenanya tidak berguna di sini.)sumber