May 17 2012
JAXB can be made to run on Android
A customer asked me to prepare a sample Android project which converts docx to HTML.
The result is AndroidDocxToHtml
Since docx4j relies heavily on JAXB, the key to getting it working was getting JAXB – the reference implementation – to run on Android.
Android presents us with a number of challenges:
- it won’t let you add a jar which includes classes in the javax.xml namespace (which is where the JAXB API lives)
- JAXB uses JAXP 1.3 DatatypeFactory, but Android doesn’t provide it
- JAXB uses javax.activation.DataHandler
- Dalvik has a limit of 65536 method references per dex file
- it doesn’t support package level annotations (which JAXB uses, and which in docx4j supply namespaces)
Ill-advised or mistaken usage of a core class (java.* or javax.*)
You’ll get this message if you try to add a jar containing classes in java.* or the following javax packages:
Android doesn’t provide javax.xml.bind, and it won’t let you add it yourself. It forces you to re-package it. Just like on Google AppEngine, until Google eventually added it.
OK, done that; see https://github.com/plutext/jaxb-2_2_5_1/tree/android2 (the 2 in android2 is meaningless)
Repackaging is easy enough; the problem with it is that any library which uses the repackaged code, must also be changed. In the case of docx4j, this means a new branch, and ongoing maintenance.
JAXB uses JAXP 1.3 DatatypeFactory, but Android doesn’t provide it
com.sun.xml.bind invokes javax.xml.datatype.DatatypeFactory.newInstance, whereupon Android throws javax.xml.datatype.DatatypeConfigurationException: Provider org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl not found.
Easy solution: jar it up and provide it.
JAXB uses javax.activation.DataHandler
Easy solution: use the activation and additionnal jars from http://code.google.com/p/javamail-android/downloads/list
Dalvik limit of 65536 method references per dex file
This is more an issue running docx4j on Android than one related to JAXB, but it is worth noting. We’re running very close to this limit. Vote for the issue at http://code.google.com/p/android/issues/detail?id=7147
Also, you may need to give Eclipse more heap space (symptom is ‘you get Unable to execute dex: Java heap space’). In eclipse.ini, I used:
-Xms256m
-Xmx4096m
In Eclipse, Windows > Preferences > General > Show Heap Status gives you an entry on the bottom row which is useful.
Just when I thought it would all work…
I found that my XML was not unmarshalling, because it contains namespaces, and for some reason the objects in my JAXB were being read as not having any.
The problem is that Android doesn’t support package annotations: http://code.google.com/p/android/issues/detail?id=16149 (vote), but JAXB needs to read them. For example:
I ended up devising a simple minded way to tell JAXB about these programmatically. See Context.java. Hmmm, I probably should have created my own RuntimeInlineAnnotationReader implementation (Google ‘JAXBIntroductions’).
That done, it more or less works (if you need support for other package level annotations, you’ve got a bit more to do). The re-packaged JAXB is here. You can build it using ant -f build-repackaged.xml dist
It should work on Android 3 or 4.
To use it, where your code would otherwise import javax.xml.bind, use ae.java.xml.bind.
Mohamed Sobhy said,
May 21, 2012 @ 5:01 pm
Can you please send me the jar file containing the packaged component, because I’m a bit lost in the Git Repository. And wouldn’t it work for Android >2?
Please help me with this issue.
Jason said,
May 21, 2012 @ 5:14 pm
See https://github.com/plutext/AndroidDocxToHtml/tree/master/libs
It might work on Android 2, but I haven’t tried it there.
Mohamed Sobhy said,
May 21, 2012 @ 5:47 pm
05-21 09:45:36.121: W/dalvikvm(5032): Unable to resolve superclass of Lae/com/sun/xml/bind/v2/runtime/JAXBContextImpl$1; (812)
05-21 09:45:36.121: W/dalvikvm(5032): Link of class ‘Lae/com/sun/xml/bind/v2/runtime/JAXBContextImpl$1;’ failed
05-21 09:45:36.121: E/dalvikvm(5032): Could not find class ‘ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl$1’, referenced from method ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.
05-21 09:45:36.121: W/dalvikvm(5032): VFY: unable to resolve new-instance 284 (Lae/com/sun/xml/bind/v2/runtime/JAXBContextImpl$1;) in Lae/com/sun/xml/bind/v2/runtime/JAXBContextImpl;
What would make that happen?
Mohamed Sobhy said,
May 21, 2012 @ 5:52 pm
Can you please add me to Gmail contact because I need to talk to you about something? That of course if you are willing
Mohamed Sobhy said,
May 23, 2012 @ 5:12 pm
Thanks a lot it worked on Android 2.3.3 using my Samsung Galaxy S2.
Just had to put those libraries in “libs” folder of the project and it worked like a charm.
activation.jar
additionnal.jar
ae-jaxb-2.2.5.jar
istack-commons-runtime.jar
jaxp-datatype.jar
txw2-20110809.jar
And added that line in the onCreate of my main Activity.
RuntimeInlineAnnotationReader.cachePackageAnnotation(
.class.getPackage(), new XmlSchemaMine(“”));
Fuu said,
June 6, 2012 @ 8:57 am
how did you get around android asking you for java beans?
Chris Braunstein said,
June 30, 2012 @ 4:59 am
All – where did you get the following JARs from:
istack-commons-runtime.jar
jaxp-datatype.jar
txw2-20110809.jar
Chris Braunstein said,
June 30, 2012 @ 5:00 am
Nevermind – I found them in your other project. Thanks
Inari said,
July 16, 2012 @ 5:15 am
“Thanks a lot it worked on Android 2.3.3 using my Samsung Galaxy S2.
Just had to put those libraries in “libs” folder of the project and it worked like a charm.
activation.jar
additionnal.jar
ae-jaxb-2.2.5.jar
istack-commons-runtime.jar
jaxp-datatype.jar
txw2-20110809.jar
And added that line in the onCreate of my main Activity.
RuntimeInlineAnnotationReader.cachePackageAnnotation(
.class.getPackage(), new XmlSchemaMine(“”));”
I try to follow step by step, but it does not work. Can you tell me more clearly, I’m a newbie.
Thanks
Hari said,
July 23, 2012 @ 2:52 am
First of all this is a very nice approach and I really liked it. A good effort you have put in. I first tried on Java project and it worked very well. Then I migrated code to Android project and got following error (Code marked with ***). Your thoughts on this will be helpful. Thank you in advance.
1) Could not find method org.apache.xerces.util.DatatypeMessageFormatter.formatMessage, referenced from method org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl.
2) VFY: unable to resolve static method 13545: Lorg/apache/xerces/util/DatatypeMessageFormatter;.formatMessage (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
3) org.w3c.dom.DOMException: xsi
at org.apache.harmony.xml.dom.NodeImpl.validatePrefix(NodeImpl.java:213)
Following is example code I tested:
Document document = documentBuilder.parse(new InputSource(new StringReader(processXMLReponse)));
NodeList nodeList = document.getFirstChild().getChildNodes();
int length = nodeList.getLength();
for (int i = 0; i < length; i++) {
Node node = nodeList.item(i);
if ("machinename".equalsIgnoreCase(node.getNodeName())) {
String packageName = Details.class.getPackage()
.getName();
JAXBContext jc = JAXBContext.newInstance(packageName);
Unmarshaller u = jc.createUnmarshaller();
**** JAXBElement doc = (JAXBElement) u
.unmarshal(node, Details.class);
Details details = doc.getValue();
if (details == null) {
System.out.println(“Details object is null”);
} else {
System.out.println(“Name from processed data is : ”
+ details.getName());
}
Jason said,
July 23, 2012 @ 8:13 am
Which jar on your classpath is providing org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl? You’d better add org.apache.xerces.util.DatatypeMessageFormatter
Re 3, is your xsi namespace prefix declared?
Hari said,
July 23, 2012 @ 9:10 am
I guess I am using jaxp-datatype.jar (downloaded from your site) for the same unless something is messing up on the classpath. I also moved all JAXB related jar to the TOP under Project Preferences->Build path->Order and Export preferences.
I am not sure how to declare the namespace prefix (xsi). I tested on Java project it worked so I am sure I may missed some directions. Would you be able to guide me on this?
Hari said,
July 23, 2012 @ 9:12 am
Following is what the imports on the class I am testing looks like:
import ae.javax.xml.bind.annotation.XmlAccessType;
import ae.javax.xml.bind.annotation.XmlAccessorType;
import ae.javax.xml.bind.annotation.XmlElement;
import ae.javax.xml.bind.annotation.XmlSchemaType;
import ae.javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;
Hari said,
July 23, 2012 @ 12:42 pm
On positive note I downloaded source and repackaged DatatypeMessageFormatter into application and now that issue is resolved. I am still not able to resolve “xsi” issue and any insight on this will be helpful.
Hari said,
July 24, 2012 @ 3:40 pm
“xsi” issue now resolved.
Santosh P said,
October 18, 2012 @ 2:50 pm
hi,
I used AndroidDocxToHtml android application library for converting Docx to PDf in android platform using ConvertOutPDF.java samples examples. It gives error at runtime as follows:
java.lang.NoClassDefFoundError: org.apache.fop.apps.FopFactory
10-15 10:32:47.459: E/AndroidRuntime(1782): at org.docx4j.convert.out.pdf.viaXSLFO.Conversion.output(Conversion.java:231)
Then I addes Fop-095.jar file to android application Then it gives compilation error as follows:
Conversion to Dalvik format failed with error 2
Please help above problem.
If any source code for converting Docx to pdf in android platform. Please send me source code.
Regrads,
Santosh P.
Piers said,
November 30, 2012 @ 9:43 am
Hi,
I’m using this JAXB implementation for an Android project. This is working just fine for unmarshall (thanks!). However, I cannot get it to marshall. My code is failing on the XMLOutputFactor.newInstance() call with a “InstantiationException” presumably because XMLOutputFactory is abstract?!?
I’m not at all sure what implementation I need to pass as a system property for “ae.javax.xml.stream.XMLOutputFactory”. I’m just passing “ae.javax.xml.stream.XMLOutputFactory” as the value but clearly this isn’t working.
Complete newbie here so any help very welcome.
Piers
Suprateek said,
December 4, 2012 @ 11:44 pm
Hi,
I am developing an android app which needs to render components dynamically according to an xml string. This xml string is created based on an xsd. I have used jaxb xjc to create an object model from the xjc. But now I want to be able to unmarshall and parse the complete xml with jaxb. Please let me know if these are the steps I need to follow:-
1.
Import the librarys:
activation.jar
additionnal.jar
ae-jaxb-2.2.5.jar
istack-commons-runtime.jar
jaxp-datatype.jar
txw2-20110809.jar
2. Replace my jaxb imports to ae.jaxb.
3. Do I need to add this line to my onCreate :- ??
RuntimeInlineAnnotationReader.cachePackageAnnotation(.class.getPackage(), new XmlSchemaMine(“”));”
I did everything mentioned here but still I am getting this exception :
12-04 13:44:39.820: E/AndroidRuntime(2219): FATAL EXCEPTION: main
12-04 13:44:39.820: E/AndroidRuntime(2219): java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlRegistry
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.Class.getDeclaredAnnotation(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.Class.getAnnotation(Class.java:260)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassAnnotation(RuntimeInlineAnnotationReader.java:109)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassAnnotation(RuntimeInlineAnnotationReader.java:59)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:461)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:299)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:142)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1164)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:146)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:237)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invoke(Method.java:511)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:186)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.find(ContextFinder.java:361)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:313)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.example.testuirenderxml.RenderXml.generateFirstMenu(RenderXml.java:79)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.example.testuirenderxml.RenderXml.onCreate(RenderXml.java:112)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.Activity.performCreate(Activity.java:5104)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.os.Looper.loop(Looper.java:137)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invoke(Method.java:511)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-04 13:44:39.820: E/AndroidRuntime(2219): at dalvik.system.NativeStart.main(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): Caused by: java.lang.ClassNotFoundException: Didn’t find class “javax.xml.bind.annotation.XmlRegistry” on path: /data/app/com.example.testuirenderxml-2.apk
12-04 13:44:39.820: E/AndroidRuntime(2219): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-04 13:44:39.820: E/AndroidRuntime(2219): … 35 more
Does someone have any idea how to resolve this?
Suprateek said,
December 5, 2012 @ 6:27 pm
Thanks to Mohamed Sobhy, the code does not throw a runtime exception now, however its not recognizing the XMLSchema Annotations present in the files generated(from the xsd) with JAXB xjc. Do I need to recreate the object model using this repackaged jaxb?
sven said,
December 20, 2012 @ 8:56 pm
I followed the instructions very carefully. But I still get a java.lang.NoClassDefFoundError. if I try to run my TestProject. The Error Message refers to “javax/xml/bind/annotation/XmlRegistry”, such as Suprateek.
If anyone has purposeful informations, this are very desireable.
Strange is also that there stands “javax” instead of “ae.java”. If I search within my IDE after “XmlRegistry”, it can be found in the package ae.javax.xml.bind.annotation and compilation is also successfully. But at runtime it fails with above error. Furthermore it should search in ae.*, not in javax.*.
Leejjon said,
December 23, 2012 @ 11:42 pm
If anyone has a simple example of this I’d be very interested. Right now I’m not able to compile the android branch of doc4j with maven, so I can’t test whether this is working at all.
Jason said,
January 14, 2013 @ 9:13 pm
Please use the http://www.docx4java.org/forums/android-f19/ for any further comments.
william said,
February 11, 2013 @ 2:13 am
Even JAXB can be ported to work on Android, I still think it’s not advisable to use JAXB directly on Android, JAXB was originally designed for desktop and server side development, not for resource limited mobile device, so I guess its performance will be terrible on Android!
For xml binding on Android, I would recommend a light-weight framework tailored for that, it’s called Nano, the link is here(https://github.com/bulldog2011/nano), it uses JAXB like annotation, performance comparable to Android native parser like SAX and Xml Pull, supports both Xml and Json binding, also, it provides a XJC based binding compiler to auto-generate bindable class from Xml schema, you may have a try if you have interest.
Michael Moser said,
March 12, 2013 @ 10:09 am
I carried the modified/renamed/repackaged JAXB ae-jaxb-2.2.5.jar, activation.jar and jaxp-datatype.jar over to an android app that I am trying to write and adapted the package names as described but, alas, my program always dies in the initial JAXBContext.newInstance(…) call:
…
JAXBContext jc;
try {
jc = JAXBContext.newInstance(pckName);
…
…
with the below stacktrace. Any wisdom on this? I was trying this using Android 2.3.3 and 4.0.3, but same error in both versions. The very same code snippet when run on a JRE 1.6.0 works fine.
Any hint what I might be missing would be highly appeciated! Are there additional .jars required? Or some other setup or configuration?
M.
The mentioned stacktrace:
…
03-12 00:58:57.802: E/dalvikvm(604): Could not find class ‘com.sun.istack.FinalArrayList’, referenced from method ae.com.sun.xml.bind.v2.ContextFactory.createContext
03-12 00:58:57.802: W/dalvikvm(604): VFY: unable to resolve new-instance 855 (Lcom/sun/istack/FinalArrayList;) in Lae/com/sun/xml/bind/v2/ContextFactory;
03-12 00:58:57.812: D/dalvikvm(604): VFY: replacing opcode 0x22 at 0x0000
03-12 00:58:57.832: E/dalvikvm(604): Could not find class ‘com.sun.istack.FinalArrayList’, referenced from method ae.com.sun.xml.bind.v2.ContextFactory.loadIndexedClasses
03-12 00:58:57.832: W/dalvikvm(604): VFY: unable to resolve new-instance 855 (Lcom/sun/istack/FinalArrayList;) in Lae/com/sun/xml/bind/v2/ContextFactory;
03-12 00:58:57.832: D/dalvikvm(604): VFY: replacing opcode 0x22 at 0x002f
03-12 00:58:57.832: D/dalvikvm(604): DexOpt: unable to opt direct call 0x1650 at 0x02 in Lae/com/sun/xml/bind/v2/ContextFactory;.createContext
03-12 00:58:57.832: D/dalvikvm(604): DexOpt: unable to opt direct call 0x1650 at 0x31 in Lae/com/sun/xml/bind/v2/ContextFactory;.loadIndexedClasses
03-12 00:58:57.842: D/AndroidRuntime(604): Shutting down VM
03-12 00:58:57.842: W/dalvikvm(604): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-12 00:58:57.892: E/AndroidRuntime(604): FATAL EXCEPTION: main
03-12 00:58:57.892: E/AndroidRuntime(604): java.lang.NoClassDefFoundError: com.sun.istack.FinalArrayList
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
03-12 00:58:57.892: E/AndroidRuntime(604): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 00:58:57.892: E/AndroidRuntime(604): at java.lang.reflect.Method.invoke(Method.java:511)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:186)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.ContextFinder.find(ContextFinder.java:361)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
03-12 00:58:57.892: E/AndroidRuntime(604): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:313)
03-12 00:58:57.892: E/AndroidRuntime(604): at mmo.application.listpro.activities.DisplayLists.readXML(DisplayLists.java:456)
03-12 00:58:57.892: E/AndroidRuntime(604): at mmo.application.listpro.activities.DisplayLists.onResume(DisplayLists.java:125)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.Activity.performResume(Activity.java:4539)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.os.Looper.loop(Looper.java:137)
03-12 00:58:57.892: E/AndroidRuntime(604): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-12 00:58:57.892: E/AndroidRuntime(604): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 00:58:57.892: E/AndroidRuntime(604): at java.lang.reflect.Method.invoke(Method.java:511)
03-12 00:58:57.892: E/AndroidRuntime(604): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-12 00:58:57.892: E/AndroidRuntime(604): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-12 00:58:57.892: E/AndroidRuntime(604): at dalvik.system.NativeStart.main(Native Method)
…