Intereting Posts
Ресурс был получен при подключенной трассировке стека, но не был выпущен. См. Java.io.Closeable для получения информации об избежании утечек ресурсов Создать JavaDocs Android Studio Панель инструментов не будет разрушаться с помощью Scrollview в качестве дочернего элемента CoordinatorLayout Что лучше? NotifyDataSetChanged или notifyItemChanged в цикле? Java.io.filenotfoundexception открыть сбой eacces (разрешение отклонено) на устройстве Имеет ли синхронный характер встроенный Android BLE GATT? Как создать точку доступа программно Ориентация изображения от цели галереи / камеры Метод setMobileDataEnabled больше не может быть вызван как на Android L, так и позже Android пытается использовать переработанное растровое изображение, а не в моем коде Дифференциация между прокруткой и изменением страницы программы в ViewPager Текстовое изображение показывает частичный текст Как сделать красивые и стильные приложения, такие как Timely Android вырастает в куче Как показать значки в меню переполнения в ActionBar

Как заставить значение метаданных ввести строку?

Я указал метаданные в файле manifest.xml следующим образом:

<meta-data android:value="5555555555" android:name="foo"></meta-data> 

При доступе к метаданным:

 ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA); Object value = (Object)ai.metaData.get(key); 

Это значение интерпретируется как int и, что более важно, неверно проиндексировано (1260588259).

Поскольку тип определяется автоматически системой сборки (booleans, ints, floats и strings), я задавался вопросом, есть ли способ принудительно привязать тип данных к строке.

Я попробовал добавить пробел в конец («5555555555»), но тогда значение интерпретируется как 5.5555553E9 float! ).

Я также попытался использовать getString вместо get, но затем возвращается null.

Есть идеи? ТИА.

Solutions Collecting From Web of "Как заставить значение метаданных ввести строку?"

Похоже, что сбежавшее пространство перед номером работает:

 <meta-data android:name="foo" android:value="\ 1234567890"/> 

Экранированное пространство не отображается в значении, возвращаемом get() .

Я понятия не имею, как это работает, если честно.

Если вы хотите что-то задокументированное и, следовательно, более надежное, вы всегда можете поместить свое строковое значение в качестве ресурса и ссылаться на него:

 <meta-data android:name="foo" android:resource="@string/mynumber"/> 

У меня также есть такая проблема. Мое решение таково:

 <meta-data android:value="5555555555\0" android:name="foo"></meta-data> 

Я добавил в конце переменной – eskape sequence "\ 0" (NULL – часто используется для определения конца символьной строки (например, на языке C).

Эта работа для меня.

С наилучшими пожеланиями.

Вместо пространства попробуйте использовать фрагмент пунктуации, который не должен иметь никакой роли в числовом значении, например двоеточие, и посмотреть, помогает ли это.

Я недавно столкнулся с этой проблемой, и очень расстраивает то, что что-то вроде id приложения Facebook интерпретируется как целое число, приводящее к проблемам из-за переполнения (конечно). Я бы подумал / надеялся, что можно будет переопределить неявное типирование. Например, вместо:

 <meta-data android:name="value" android:value="12345678901234567890" /> 

Было бы неплохо, если бы мы могли написать:

 <meta-data android:name="value" android:type="string" android:value="12345678901234567890" /> 

Чтобы компенсировать это, я написал некоторый вспомогательный код, который требует наличия атрибутов атрибутов, которые выглядят следующим образом:

 <meta-data android:name="value1" android:value="string/12345678901234567890" /> <meta-data android:name="value2" android:value="integer/12345" /> <meta-data android:name="value3" android:value="boolean/true" /> <meta-data android:name="value4" android:value="float/1.34" /> <meta-data android:name="value5" android:value="float/6" /> 

Обратите внимание, что это похоже на синтаксис Android @string / @integer за исключением того, что я сбросил @ , интерпретируя это как снижение уровня косвенности.

Помимо решения исходной задачи [0-9] +, всегда интерпретируемой как целые числа, кажется, она также позволяет указывать float, несмотря на то, что она выглядит как целое число.

Дополнительным преимуществом этого является возможность произвольного расширения набора типов. например

 <meta-data android:name="myfrac" android:value="fraction/3/7" />