Mario Dennis
Mario Dennis

Reputation: 3016

android No class def found error generated when google guice framework

I am using the Guice Dependency Injection framework in my android application. when I run my application I get a NoClassDefFoundError for the module class.

import com.google.inject.AbstractModule;
import com.pps.data.services.UserService;
import com.pps.data.services.IService;

public class DataModule extends AbstractModule{

        public void configure ()
        {
            bind (IService.class).to(UserService.class);
        }

}//end dataModule class

 public class DataManager {
  private static DataManager instance;
   private DataModule module;

/*
 * Default constructor Singleton Pattern
 */
private DataManager ()
{
    module = new DataModule ();
}//end constructor



/**
 * Gets instance of DataManager class
 * @author Mario Dennis
 * @return
 */
public static DataManager getInstance ()
{
    if (instance == null)
    {
        instance = new DataManager ();
        return instance;
    }
    else
        return instance;
}//end getInstance method



@SuppressWarnings({ "unchecked", "rawtypes" })
public <T> List<T> getAll (Class object)
{
    Injector inject = Guice.createInjector(module);
    IService<T> service = (IService<T>) inject.getBinding(object.getClass());

    return service.getAll();    
}
}//end DataManager class

LogCat:

  10-21 15:40:54.082: D/dalvikvm(3725): Late-enabling CheckJNI
  10-21 15:40:54.902: W/dalvikvm(3725): Unable to resolve superclass of Lcom/pps/data/DataModule; (414)
  10-21 15:40:54.902: W/dalvikvm(3725): Link of class 'Lcom/pps/data/DataModule;' failed
  10-21 15:40:54.902: E/dalvikvm(3725): Could not find class 'com.pps.data.DataModule', referenced from method com.pps.data.DataManager.<init>
  10-21 15:40:54.902: W/dalvikvm(3725): VFY: unable to resolve new-instance 421 (Lcom/pps/data/DataModule;) in Lcom/pps/data/DataManager;
  10-21 15:40:54.902: D/dalvikvm(3725): VFY: replacing opcode 0x22 at 0x0003
  10-21 15:40:54.902: E/dalvikvm(3725): Could not find class 'com.google.inject.Module[]', referenced from method com.pps.data.DataManager.getAll
  10-21 15:40:54.902: W/dalvikvm(3725): VFY: unable to resolve new-array 539 ([Lcom/google/inject/Module;) in Lcom/pps/data/DataManager;
  10-21 15:40:54.902: D/dalvikvm(3725): VFY: replacing opcode 0x23 at 0x0001
  10-21 15:40:54.902: W/dalvikvm(3725): Unable to resolve superclass of Lcom/pps/data/DataModule; (414)
  10-21 15:40:54.902: W/dalvikvm(3725): Link of class 'Lcom/pps/data/DataModule;' failed
  10-21 15:40:54.902: D/dalvikvm(3725): DexOpt: unable to opt direct call 0x0bcf at 0x05 in Lcom/pps/data/DataManager;.<init>
  10-21 15:40:54.902: D/AndroidRuntime(3725): Shutting down VM
  10-21 15:40:54.902: W/dalvikvm(3725): threadid=1: thread exiting with uncaught exception (group=0x40a4e1f8)
  10-21 15:40:54.932: E/AndroidRuntime(3725): FATAL EXCEPTION: main
  10-21 15:40:54.932: E/AndroidRuntime(3725): java.lang.NoClassDefFoundError: com.pps.data.DataModule
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at com.pps.data.DataManager.<init>(DataManager.java:17)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at com.pps.data.DataManager.getInstance(DataManager.java:31)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at com.pps.jamaica.MainActivity.onCreate(MainActivity.java:21)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at android.app.Activity.performCreate(Activity.java:4465)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
  10-21 15:40:54.932: E/AndroidRuntime(3725):   at android.app.ActivityThread.access$600(ActivityThread.java:132)
 10-21 15:40:54.932: E/AndroidRuntime(3725):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
 10-21 15:40:54.932: E/AndroidRuntime(3725):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at android.os.Looper.loop(Looper.java:137)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at android.app.ActivityThread.main(ActivityThread.java:4575)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at java.lang.reflect.Method.invokeNative(Native Method)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at java.lang.reflect.Method.invoke(Method.java:511)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
10-21 15:40:54.932: E/AndroidRuntime(3725):     at dalvik.system.NativeStart.main(Native Method)

How can I fix this problem or is it that I can't use the Guice framework for android dev?

Upvotes: 0

Views: 1875

Answers (2)

teteArg
teteArg

Reputation: 4024

I solve this NoClassDefFoundError by moving the .java file to another proyect and them back to the original proyect, so eclipse rebuild it's references.

Upvotes: 0

Ahmad
Ahmad

Reputation: 72603

If you get NoClassDefFoundError during Runtime, then I suspect you did not include the .jar file sto work at runtime. You have to check the checkbox for each .jar like this:

enter image description here

Upvotes: 1

Related Questions