По причинам отладки я хочу перечислить все дополнения (и их значения) намерения. Теперь получить ключи не проблема
Set<String> keys = intent.getExtras().keySet();
но получение значений ключей - одно для меня, потому что некоторые значения являются строками, некоторые - логическими ... Как я могу получить значения в цикле (циклически перебирая ключи) и записать значения в файл журнала? Спасибо за любую подсказку!
android
android-intent
stefan.at.wpf
источник
источник
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Гдеdata
намерение. Для начинающих Android.value = "null"
.Вот как я определяю служебный метод для сброса всех дополнительных функций Intent.
источник
Вы можете сделать это в одной строке кода:
Это выводит что-то вроде:
"#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; конец "
В конце этой строки (часть, которую я выделил) вы можете найти список дополнений (только один дополнительный в этом примере).
Это в соответствии с документацией toUri : «URI содержит данные Интента в качестве базового URI с дополнительным фрагментом, описывающим действие, категории, тип, флаги, пакет, компонент и дополнительные элементы».
источник
источник
Метод get (String key) из Bundle возвращает объект. Лучше всего прокрутить набор ключей, вызывая get (String) для каждой клавиши и используя toString () для Object для их вывода. Это будет работать лучше всего для примитивов, но вы можете столкнуться с проблемами с объектами, которые не реализуют toString ().
источник
источник
Мне нужен был способ вывести содержимое намерения в журнал и чтобы его можно было легко прочитать, поэтому вот что я придумал. Я создал
LogUtil
класс, а затем взялdumpIntent()
метод @Pratik и немного его изменил. Вот как это все выглядит:Надеюсь, это поможет кому-то!
источник
Вы можете использовать,
for (String key : keys) { Object o = get(key);
чтобы вернуть Object, вызватьgetClass().getName()
его, чтобы получить тип, а затем выполнить набор типов if name.equals ("String"), чтобы выяснить, какой метод вы на самом деле должны вызывать, чтобы получить значение ?источник
В источнике Android я заметил, что почти каждая операция вынуждает Bundle разархивировать свои данные. Так что, если (как и мне) вам нужно делать это часто для целей отладки, приведенный ниже текст можно набрать очень быстро:
источник
Извините, если это слишком многословно или слишком поздно, но это был единственный способ найти работу. Наиболее сложным фактором был тот факт, что java не имеет функций обхода по ссылкам, поэтому методам get --- Extra необходимо возвращать значение по умолчанию, и он не может изменить логическое значение, чтобы определить, было ли возвращено значение по умолчанию случайно, или потому что результаты не были благоприятны. Для этой цели было бы лучше, если бы метод вызывал исключение, а не возвращал значение по умолчанию.
Я нашел свою информацию здесь: Документация по Android .
Задать документацию
источник
Kotlin-версия служебного метода Pratik, который сбрасывает все дополнения Intent:
источник
for (key in bundle.keySet())
Если для отладки все, что вам нужно, это строка (вроде как подразумевается OP, но явно не указано), просто используйте
toString
в дополненияхBundle
:Возвращает строку, такую как:
Документация: Bundle.toString () (к сожалению, это
Object.toString()
javadoc по умолчанию, и здесь он совершенно бесполезен.)источник