gpt4 book ai didi

java - 安卓 KXmlParser "NoSuchMethodError: java.lang.System.arraycopy([CI[CII)V"

转载 作者:行者123 更新时间:2023-11-30 00:07:24 25 4
gpt4 key购买 nike

我在 Spock 规范(无 Robolectric)中使用 KXmlParser 来解析 Android strings.xml 文件。我间歇性地得到以下痕迹:

java.lang.NoSuchMethodError: java.lang.System.arraycopy([CI[CII)V

at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1509)
at org.kxml2.io.KXmlParser.peekType(KXmlParser.java:1001)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:448)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)

知道哪里出了问题吗?

这是我的分机属性:

minSdkVersion = 19
targetSdkVersion = 26
compileSdkVersion = 26
buildToolsVersion = '26.0.2'

这是代码 fragment :

        try (FileInputStream in = new FileInputStream("app/src/main/res/values/strings.xml")) {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(in, null);

AndroidStringResource resource = null;
int eventType = parser.getEventType();
while (eventType != parser.END_DOCUMENT) {
eventType = parser.next();

if (eventType == parser.START_TAG) {
if (parser.getName().equals("string")) {
resource = new AndroidStringResource();
resource.name = parser.getAttributeValue(null, "name");
resource.context = parser.getAttributeValue(null, "context");

String maxLengthStr = parser.getAttributeValue(null, "maxLength");
resource.maxLength = (maxLengthStr == null) ? -1 : Integer.parseInt(maxLengthStr);
}
} else if (eventType == parser.TEXT) {
if (resource != null) {
resource.value = parser.getText();
}
} else if (eventType == parser.END_TAG) {
if (parser.getName().equals("string")) {

if (!resourceNameToServerKeyMap.containsKey(resource.name)) {
androidStringResourceMap.put(resource.name, resource);
}
resource = null;
}
}
}
}

请注意,我正在将自定义 XML 属性添加到我的 strings.xml 中的元素。这是一个例子:

<resources>
<string name="app_name" maxLength="30">myapp</string>
</resources>

MVCE 可重现测试用例可用 here .

最佳答案

问题是由于我使用 Spock 框架在 Android VM 之外的 JVM 中运行测试引起的。这意味着我的测试无法使用 Android 运行时提供的某些代码。解决方案是使用 robolectric,以便它可以提供 Android 运行时的影子实现,并且仍然允许我的测试在 Android VM 之外的 JVM 中运行。一旦我将我的 spock 测试更改为使用 robolectric,一切都很好。

关于java - 安卓 KXmlParser "NoSuchMethodError: java.lang.System.arraycopy([CI[CII)V",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739202/

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