Прочитайте файл Layout xml с помощью программы чтения - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь прочитать XML-файл макета.

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
                InputStreamReader isr= new InputStreamReader(in);
                BufferedReader br = new BufferedReader(isr);
                while((line=br.readLine()) != null )
                {
                    XposedBridge.log(line);
                 }

Это мой код, а этот - мой соответствующий XML-файл. вывод, который я получаю: the output that I get:

Так как это мой проект, мне нужно быстро разобраться (осталось 2 дня), так что любая помощь будет признательна.

Итак, вот как я это решил: У меня не было идентификатора, поэтому сначала я получаю идентификатор:

int layoutId =mCurrentActivity.getResources().getIdentifier("activity_main", "layout",mCurrentActivity.getPackageName());

, а затем:

XmlResourceParser s = mCurrentActivity.getResources().getLayout(layoutId);

Благодаря Майку М.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

XML-файл, который вы пытаетесь прочитать, не является простым бинарным XML-форматом XML. Поэтому попытка прочитать его с помощью обычного Reader не будет работать.

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

String file="res/layout/activity_main.xml";
InputStream in = mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file));
Document doc = new CompressedXmlParser().parseDOM(in);
0 голосов
/ 13 января 2019

Поиск вызывает у меня довольно похожую проблему здесь . Думаю, основная идея решения вашей проблемы - указывать кодировку.

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

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
InputStreamReader isr= new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null)
{
    XposedBridge.log(line);
}

или

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
InputStreamReader isr= new InputStreamReader(in, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null)
{
    XposedBridge.log(line);
}

или попробуйте использовать другой вариант кодировки, несмотря на UTF-8.

Полагаю, это зависит от того, какую кодировку вы указали в файле .xml

Пример:

<?xml version="1.0" encoding="utf-8"?>
...