user4774371
user4774371

Reputation:

Android ksoap2 library throwing NoClassDefFoundError exception on SoapObject

There are number of SO question on this crash/bug, but all of them are either related to eclipse or not working for me. I have a project with following dependencies

repositories {
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots'
    }
    maven { url 'https://maven.fabric.io/public' }
    maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases' }
}

dependencies {
    compile('com.crashlytics.sdk.android:crashlytics:2.5.7@aar') {
        transitive = true;
    }
    compile('com.squareup.retrofit2:retrofit:2.0.0') {
        //exclude web sockets module from okhttp
        exclude module: 'okhttp-ws'
        exclude module: 'okhttp'
    }
    configurations {
        compile.exclude group: 'org.json', module: 'json'
    }
    compile files('libs/smack-core-4.1.7.jar')
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:support-v4:24.2.1'
    compile 'com.android.support:customtabs:24.2.1'
    compile 'com.google.guava:guava:18.0'
    compile 'com.github.amlcurran.showcaseview:library:5.0.0'
    compile 'com.koushikdutta.async:androidasync:2.1.4'
    compile 'com.nhaarman.listviewanimations:lib-core:3.1.0'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'xpp3:xpp3:1.1.4c'
    compile 'org.jxmpp:jxmpp-core:0.4.2'
    compile 'org.igniterealtime.smack:smack-android-extensions:4.1.7'
    compile 'org.igniterealtime.smack:smack-tcp:4.1.7'
    compile 'io.realm:android-adapters:1.3.0'
    compile 'com.orhanobut:logger:1.15'
    compile 'com.github.clans:fab:1.6.4'
    compile 'com.wang.avi:library:2.1.3'
    compile 'org.jsoup:jsoup:1.9.2'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    **compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'**
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

configurations {
    compile.exclude module: 'smack-core'
    compile.exclude module: 'gson'
    all*.exclude group: 'xpp3', module: 'xpp3'
}

Project Gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:1.2.0"
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

My project was working and had no issue but after I updated Android Studio to 2.2 this crash is occurring only on pre-lollipop devices. I am not sure it is caused due to Android Studio update.

Caused by: java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
at com.webgreeter.livechat.networkcalls.SoapWebServices.checkAndLogin(SoapWebServices.java:256)
at com.webgreeter.livechat.ui.LoginAsyncTask.LoginProcess(LoginAsyncTask.java:84)
at com.webgreeter.livechat.ui.LoginAsyncTask.doInBackground(LoginAsyncTask.java:39)
at com.webgreeter.livechat.ui.LoginAsyncTask.doInBackground(LoginAsyncTask.java:21)
at android.os.AsyncTask$2.call(AsyncTask.java:288)

Actual code where it is crashing is:

 String METHOD_NAME = "CheckandLogin";
 SoapObject so = new SoapObject(NAMESPACE, METHOD_NAME);
 so.addProperty("username", operator.getName());
 so.addProperty("password", operator.getPassword());
 so.addProperty("licenseKey", operator.getLicenseKey());

Upvotes: 1

Views: 495

Answers (2)

user4774371
user4774371

Reputation:

After spending hours and backtracking code, I finally found the source of bug. It was a dependence issue, and it was happening due to conflict in dependencies. There wasn't any message, log or error pointing in this direction. I removed Glide and it fixed the issue. Now I am using Picasso.

compile 'com.github.bumptech.glide:glide:3.7.0'

Upvotes: 2

Nickan
Nickan

Reputation: 466

try this :

     String username = "your username";
     PropertyInfo usernameProp = new PropertyInfo();
     usernameProp.setName("username");
     usernameProp.setValue(username);
     usernameProp.setType(String.class);
     so.addProperty(usernameProp);

Upvotes: 1

Related Questions