gpt4 book ai didi

Android 的 XMLPullParser getAttributeValue 正在从字符串中删除前导零

转载 作者:行者123 更新时间:2023-11-29 02:34:40 25 4
gpt4 key购买 nike

我有一个 XML 文档,其中包含带前导零的字符串。当我使用 XmlResourceParser 迭代 XML 文件时,我注意到带有前导零的字符串在调用 getAttributeValue 时被修改,删除了前导零。此功能在过去有效,我只是在升级到 Android Studio 3.x 后才注意到。为了让“getAttributeValue”保留前导零,我需要做些什么特别的事情吗?

这是我正在使用的测试 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<FictionalSpies>
<Property Country="Great Britain" Agency="MI6">
<Item FullName="James Bond" AgentCode="007" />
<Item FullName="John Wolfgramm" AgentCode="0010" />
<Item FullName="Sam Johnston" AgentCode="0012" />
</Property>
<Property Country="United States" Agency="CONTROL">
<Item FullName="Maxwell Smart" AgentCode="86" />
<Item FullName="Unknown" AgentCode="99" />
<Item FullName="The Chief" AgentCode="Q" />
</Property>
<Property Country="United States" Agency="MiB">
<Item FullName="James Darrell Edwards III" AgentCode="J" />
<Item FullName="Kevin Brown" AgentCode="K" />
<Item FullName="Derrick Cunningham" AgentCode="D" />
</Property>
</FictionalSpies>

这是列表中每个“ spy ”的打印日志。如您所见,前三个在其 AgentCode 中丢失了“00”。例如,詹姆斯·邦德的特工代码应该是“007”而不是“7”。

D/XMLTest: Great Britain MI6 James Bond 7
D/XMLTest: Great Britain MI6 John Wolfgramm 10
D/XMLTest: Great Britain MI6 Sam Johnston 12
D/XMLTest: United States CONTROL Maxwell Smart 86
D/XMLTest: United States CONTROL Unknown 99
D/XMLTest: United States CONTROL The Chief Q
D/XMLTest: United States MiB James Darrell Edwards III J
D/XMLTest: United States MiB Kevin Brown K
D/XMLTest: United States MiB Derrick Cunningham D

下面的代码连接到表单上的按钮按下并迭代生成先前日志消息的 XML:

public void buttonOnClick(View v)
{
int eventType = -1;
String name;
String country = null;
String agency = null;
String fullName = null;
String agentCode = null;

try
{
XmlResourceParser xmlRP = getResources().getXml(R.xml.test);

while (eventType != XmlResourceParser.END_DOCUMENT)
{
if (eventType == XmlResourceParser.START_TAG)
{
name = xmlRP.getName();
if (name.contentEquals("Property"))
{
country = xmlRP.getAttributeValue(null, "Country");
agency = xmlRP.getAttributeValue(null, "Agency");
} else if (name.contentEquals("Item"))
{
fullName = xmlRP.getAttributeValue(null, "FullName");
agentCode = xmlRP.getAttributeValue(null, "AgentCode");

Log.d("XMLTest", country + " " + agency + " " + fullName + " " + agentCode );
}
}
eventType = xmlRP.next();
}
} catch (XmlPullParserException e)
{

} catch (IOException e)
{
}
}

最佳答案

这是 AAPT2 中的错误。已经reported并已在 Android Studio 3.4 和 3.5 中修复(参见 https://androidstudio.googleblog.com/2019/01/android-studio-35-canary-2-available.html )。

您还需要升级 Android Gradle 插件 (AGP)(如此处所示:https://stackoverflow.com/a/35272475)

通过以下 build.gradle 条目,可以更改 AAPT2 行为以保持前导零:

android {
aaptOptions {
additionalParameters "--keep-raw-values"
}
}

请注意,这可能会增加您的 APK 大小。

关于Android 的 XMLPullParser getAttributeValue 正在从字符串中删除前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com