Ошибки из-за андроид

Решение, которое мы закончили, состояло из нового IResourceResolver с пользовательским Context, а не с обычным TemplateResolver. Мы выбрали это, потому что в большинстве случаев мы все еще хотели использовать сканирование классов, но иногда имели динамический контент.

Ниже показано, как мы это сделали:

public class StringAndClassLoaderResourceResolver implements IResourceResolver {


    public StringAndClassLoaderResourceResolver() {
        super();
    }


    public String getName() {
        return getClass().getName().toUpperCase();
    }


    public InputStream getResourceAsStream(final TemplateProcessingParameters params, final String resourceName) {
        Validate.notNull(resourceName, "Resource name cannot be null");
        if( StringContext.class.isAssignableFrom( params.getContext().getClass() ) ){
            String content = ((StringContext)params.getContext()).getContent();
            return IOUtils.toInputStream(content);
        }
        return ClassLoaderUtils.getClassLoader(ClassLoaderResourceResolver.class).getResourceAsStream(resourceName);
    }

    public static class StringContext extends Context{

        private final String content;

        public StringContext(String content) {
            this.content = content;
        }

        public StringContext(String content, Locale locale) {
            super(locale);
            this.content = content;
        }

        public StringContext(String content, Locale locale, Map<String, ?> variables) {
            super(locale, variables);
            this.content = content;
        }

        public String getContent() {
            return content;
        }
    }

Тестовый пример

public class StringAndClassLoaderResourceResolverTest {

    private static SpringTemplateEngine templateEngine;

    @BeforeClass
    public static void setup(){
        TemplateResolver resolver = new TemplateResolver();
        resolver.setResourceResolver(new StringAndClassLoaderResourceResolver());
        resolver.setPrefix("mail/"); // src/test/resources/mail
        resolver.setSuffix(".html");
        resolver.setTemplateMode("LEGACYHTML5");
        resolver.setCharacterEncoding(CharEncoding.UTF_8);
        resolver.setOrder(1);

        templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(resolver);
    }

    @Test
    public void testStringResolution() {
        String expected = "<div>dave</div>";
        String input = "<div th:text=\"${userName}\">Some Username Here!</div>";
        IContext context = new StringAndClassLoaderResourceResolver.StringContext(input);
        context.getVariables().put("userName", "dave");
        String actual = templateEngine.process("redundant", context);
        assertEquals(expected, actual);
    }

    @Test
    public void testClasspathResolution(){
        IContext context = new Context();
        context.getVariables().put("message", "Hello Thymeleaf!");
        String actual = templateEngine.process("dummy", context);
        String expected = "<h1>Hello Thymeleaf!</h1>";
        assertEquals(expected, actual);
    }
}

Файл шаблона фиктивного файла в src / main / resources / mail / dummy .html

<h1 th:text="${message}">A message will go here!</h1>

Примечание. Мы использовали Apache CommonsIO IOUtils для преобразования String в InputStream

1
задан Jake Furtado 6 March 2019 в 16:54
поделиться

3 ответа

Я думаю, что вы определили версию ящика v4 в своем классе java или классе kotlin. вот почему он дает вам ошибку

0
ответ дан raj kavadia 6 March 2019 в 16:54
поделиться

Проверьте, добавили ли вы зависимость.

dependencies {
   implementation 'com.android.support:appcompat-v7:28.0.0'
   implementation 'com.android.support:design:28.0.0'
}

Затем используйте тег android.support.v4.widget.DrawerLayout.

0
ответ дан bhumilvyas 6 March 2019 в 16:54
поделиться

Ошибка очевидна. Вы используете Android Support Libraries в dependencies, но в layout вы пытаетесь использовать androidx.

Например:

Поддержка Android: Libray: com.android.support:appcompat-v7

AndroidX: androidx.appcompat:appcompat:1.0.0

[1118 ] Таким образом, у вас есть один из двух вариантов, либо продолжайте использовать Android Support Libraries, что означает, что вам нужно переименовать DrawerLayout в <android.support.v4.widget.DrawerLayout или обновить проект до AndroidX.

Чтобы сделать обновление, вы можете сделать это из Android Studio, выполнив Refactor -> Migrate to AndroidX.

Если вы решите использовать этот способ, следуйте предложениям, представленным Android Studio, он zip сделает ваш проект, а затем сделает обновление. Это означает, что вы всегда можете вернуться к своему проекту до AndroidX обновления.

Также есть вероятность, что не все вещи будут работать после обновления и, возможно, потребуется ручная настройка.

Или вручную: https://developer.android.com/jetpack/androidx/migrate

0
ответ дан Yupi 6 March 2019 в 16:54
поделиться
Другие вопросы по тегам:

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