Как я могу включать раздел CDATA в ConfigurationElement?

Одна из ваших библиотек опирается на привязку данных и распространяется с созданными классами привязки данных, созданными с помощью инструментов сборки 3.3 (или более ранних версий). Проблема вызвана критическим изменением, появившимся в последней бета / rc-версии библиотеки привязки данных. В версии 3.4 подпись конструктора androidx.databinding.ViewDataBinding была изменена с:

protected ViewDataBinding(DataBindingComponent bindingComponent, View root, int localFieldCount)

на:

protected ViewDataBinding(Object bindingComponent, View root, int localFieldCount)

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

java.lang.NoSuchMethodError: No direct method (Landroidx/databinding/DataBindingComponent;Landroid/view/View;I)V in class Landroidx/databinding/ViewDataBinding; or its super classes (declaration of 'androidx.databinding.ViewDataBinding' appears in /data/app/com.example.idolon-LqF2y8dUMxZoK3PVRlzbzg==/base.apk)
        at com.example.lib.databinding.ActivityLibBinding.(ActivityLibBinding.java:20)
        at com.example.lib.databinding.ActivityLibBindingImpl.(ActivityLibBindingImpl.java:30)
        at com.example.lib.databinding.ActivityLibBindingImpl.(ActivityLibBindingImpl.java:27)
        at com.example.lib.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:316)
        at androidx.databinding.MergedDataBinderMapper.getDataBinder(MergedDataBinderMapper.java:74)
        at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:199)
        at androidx.databinding.DataBindingUtil.bindToAddedViews(DataBindingUtil.java:327)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:306)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)

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

Соответствующая ошибка в Androig Bug tracker: https://issuetracker.google.com/issues/122936785

8
задан cfeduke 7 January 2009 в 21:45
поделиться

2 ответа

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

Пример:

public class PluginConfigurationElement : ConfigurationElement
{
    public NameValueCollection CustomProperies { get; set; }

    public PluginConfigurationElement()
    {
        this.CustomProperties = new NameValueCollection();
    }

    protected override bool OnDeserializeUnrecognizedElement(string elementName, XmlReader reader)
    {
        this.CustomProperties.Add(elementName, reader.ReadString());
        return true;
    }
}

Я должен был решить ту же проблему.

5
ответ дан 5 December 2019 в 19:03
поделиться

В Вашем подклассе ConfigurationElement попытайтесь переопределить использование SerializeElement XmlWriter. WriteCData, чтобы записать Вашим данным и переопределению использование DeserializeElement XmlReader. ReadContentAsString для чтения его назад.

4
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: