1

My app works flawlessly on 5+ and 6+, but not on 7. When the app tries to log into the server throws this exception:

09-01 09:52:53.821 2654-2718/com.pipodi.italiansubsmobileclient E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.pipodi.italiansubsmobileclient, PID: 2654
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.IllegalAccessError: Method 'void org.jdom2.ContentList.sort(java.util.Comparator)' implementing interface method 'void java.util.List.sort(java.util.Comparator)' is not public (declaration of 'org.jdom2.ContentList' appears in /data/data/com.pipodi.italiansubsmobileclient/files/instant-run/dex/slice-jdom-2.0.5_82fed81e6dd7ad54ef864ead3d2cf112380d9d58-classes.dex)
at dalvik.system.DexFile.defineClassNative(Native Method)
at dalvik.system.DexFile.defineClass(DexFile.java:299)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:292)
at dalvik.system.DexPathList.findClass(DexPathList.java:418)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
at com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at org.jdom2.Document.<init>(Document.java:83)
at org.jdom2.Document.<init>(Document.java:154)
at org.jdom2.DefaultJDOMFactory.document(DefaultJDOMFactory.java:190)
at org.jdom2.input.sax.SAXHandler.reset(SAXHandler.java:228)
at org.jdom2.input.sax.SAXHandler.<init>(SAXHandler.java:208)
at org.jdom2.input.sax.DefaultSAXHandlerFactory$DefaultSAXHandler.<init>(DefaultSAXHandlerFactory.java:76)
at org.jdom2.input.sax.DefaultSAXHandlerFactory.createSAXHandler(DefaultSAXHandlerFactory.java:82)
at org.jdom2.input.SAXBuilder.buildEngine(SAXBuilder.java:848)
at org.jdom2.input.SAXBuilder.getEngine(SAXBuilder.java:904)
at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1091)
at com.pipodi.italiansubsmobileclient.connections.Connection.connectToAPIURL(Connection.java:20)
at com.pipodi.italiansubsmobileclient.connections.LoginVariables.getAuthCode(LoginVariables.java:39)
at com.pipodi.italiansubsmobileclient.connections.ItaSALogin.doInBackground(ItaSALogin.java:69)
at com.pipodi.italiansubsmobileclient.connections.ItaSALogin.doInBackground(ItaSALogin.java:38)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
at java.lang.Thread.run(Thread.java:761) 

I've tried this on my emulator, always crashing on Nougat, but no crashes on any previous versions of Android.

Did they change something at molecular level?

This is the class that throws the exception:

public class Connection extends Thread {

public static Document connectToAPIURL(String url, Context context) {
    try {
        Log.i("URLApi", url);
        if (checkInternetConnection(context)) {
            return new SAXBuilder().build(HTTPS.getInstance().connection(url));
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return null;
}

public static boolean checkInternetConnection(Context context) {
    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        return true;
    }
    return false;
}

Can you help me figuring out the problem?

Thanks!

USER9561
  • 1,084
  • 3
  • 15
  • 41
CallMeDeftsu4
  • 127
  • 1
  • 12
  • The problem seem be caused jdom2 library , update it and clean project. Caused by: java.lang.IllegalAccessError: Method 'void org.jdom2.ContentList.sort(java.util.Comparator)' implementing interface method 'void java.util.List.sort(java.util.Comparator)' is not public (declaration of 'org.jdom2.ContentList' appears in /data/data/com.pipodi.italiansubsmobileclient/files/instant-run/dex/slice-jdom-2.0.5_82fed81e6dd7ad54ef864ead3d2cf112380d9d58-classes.dex) – an_droid_dev Sep 01 '16 at 10:08
  • @an_droid_dev Already did that, didn't fix. – CallMeDeftsu4 Sep 01 '16 at 10:15
  • I'd try disabling Instant Run, Uninstall the App, rebuild and Run again - see if that cures the problem. Although not identical this question, and answers, do hold some valid insights http://stackoverflow.com/questions/7076414/java-lang-illegalaccesserror-tried-to-access-method – Mark Sep 01 '16 at 10:25
  • @MarkKeen Does Instant Run effect the signed APK? Because users with Android 7 are encountering this issue on public release. – CallMeDeftsu4 Sep 01 '16 at 10:30
  • @CallMeDeftsu4 Sorry, I assumed you were creating a debug apk from this line `:/data/data/com.pipodi.italiansubsmobileclient/files/instant-run/dex/slice-jdom-2.0.5_82fed81e6dd7ad54ef864ead3d2cf112380d9d58-classes.dex)` which stated 'instant-run' - No release version is not affected by Instant Run – Mark Sep 01 '16 at 10:32
  • @MarkKeen Yeah, just because I'm trying the app on my emulator, my OPO is on 6+, waiting for the update. So, what's your advice? Avoid using the JDOM library? – CallMeDeftsu4 Sep 01 '16 at 10:43
  • @CallMeDeftsu4 Can you change the method to public access and try? – Mark Sep 01 '16 at 11:15
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/122400/discussion-between-callmedeftsu4-and-mark-keen). – CallMeDeftsu4 Sep 01 '16 at 11:25

1 Answers1

3

I had this same issue. Upgrade to JDOM 2.0.6 and it will solve the issue.

From the JDOM release notes: "Fixes Issue 129 - Java 8 introduces public sort method on List interface. This conflicts with protected sort on ContentList"

Joe
  • 31
  • 1