【发布时间】:2011-05-05 13:40:56
【问题描述】:
我正在开发一个 Android 项目,该项目使用我也在创建的单独 JAR 文件中的类和方法,问题在于一个名为 XpathUtil 的特定实用程序类,每次我尝试调用时都会抛出 VerifyError它的静态方法之一。
这是我的 XpathUtil 类的样子:
public class XpathUtil {
private static XPath xpath = XPathFactory.newInstance().newXPath();
private static String TAG = "XpathUtil";
public static Document createXpathDocument(String xml) {
try {
Log.d(TAG , "about to create document builder factory");
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
Log.d(TAG , "about to create document builder ");
DocumentBuilder builder = docFactory.newDocumentBuilder();
Log.d(TAG , "about to create document with parsing the xml string which is: ");
Log.d(TAG ,xml );
Document document = builder.parse(new InputSource(
new StringReader(xml)));
Log.d(TAG , "If i see this message then everythings fine ");
return document;
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG , "EXCEPTION OCCURED HERE " + e.toString());
return null;
}
}
public static NodeList getNodeList(Document doc, String expr) {
try {
Log.d(TAG , "inside getNodeList");
XPathExpression pathExpr = xpath.compile(expr);
return (NodeList) pathExpr.evaluate(doc, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return null;
}
// extracts the String value for the given expression
public static String getNodeValue(Node n, String expr) {
try {
Log.d(TAG , "inside getNodeValue");
XPathExpression pathExpr = xpath.compile(expr);
return (String) pathExpr.evaluate(n, XPathConstants.STRING);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return null;
}
}
这正是我正在处理的主项目中发生异常的确切行:
mDocument = XpathUtil.createXpathDocument(xml);
如您所见,我所做的只是简单地调用createXpathDocument,它位于一个单独的 jar 文件中,该文件已通过 eclipse 成功导入并包含在我的构建路径中(我对不同类的任何其他调用) jar 工作正常)。所以我不太确定问题是什么。
我尝试在主项目和我正在使用的另一个项目上进行清理和构建,然后将其导出到实际的 jar 文件以供第三方应用程序使用,但由于某些奇怪的原因,此 XpathUtil 不起作用。
编辑:这是一个例外:
Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
java.lang.RuntimeException: An error occured while executing doInBackground()
at
android.os.AsyncTask$3.done(AsyncTask.java:200)
at
java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) at
java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at
java.util.concurrent.FutureTask.run(FutureTask.java:137) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at
java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.VerifyError:
com.kc.unity.agent.util.xml.XpathUtil at com.kc.unity.agent.util.xml.ContactDescHelper.<init>
(ContactDescHelper.java:67)
at
com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.constructContactDetails
(ContactPlatformWrapper.java:218)
at
com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.getContactDetails
(ContactPlatformWrapper.java:101) at
com.kc.unified.contacts.ContactDetails.setContactFields(ContactDetails.java:154) at com.kc.unified.contacts.ContactDetails.access$6
(ContactDetails.java:150) at
com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:79)
at
com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185) at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)... 4 more
【问题讨论】:
-
如果您提供错误的实际文本(包括堆栈跟踪),这将很有用。有几件事可能会导致
VerifyErrors,目前除了猜测之外不可能做更多的事情。 -
如果你有jar的源代码,你可以尝试将源代码而不是jar包含到主项目中,看看问题是否仍然存在?只是为了确保实用程序不使用 Android 不支持的东西。
-
这就是我设置 Suresh 的方式,我首先通过 eclipse > 属性 > java 构建路径 > 项目将整个项目添加到构建路径中。我将包括实际的例外情况