2

Hello fellow Overflows,

I am new to RoboGuice and I pretty like it. I am building an App based on the Master/Detail-Flow-Template.

When I click on a list-element I pass it to the Detail-Fragment using Extras. As RoboGuice offers it, I am using the InjectExtra Annotation to receive it on Fragment-Side.

So the Detail-side looks something like this (btw: Place is a simple, serializable pojo-class)

@Nullable
@InjectExtra(ARG_ITEM_PLACE)
Place place;

This works using a Smartphone (so its single pane and each Fragment is in its own Activity)

But When I use the dual-pane (i.e. on a tablet emulator), I get an com.google.inject.ProvisionException.

03-13 10:32:51.824    1380-1380/de.NextBike E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: de.NextBike, PID: 1380
    com.google.inject.ProvisionException: Unable to provision, see the following errors:
    1) Error injecting de.NextBike.activity.ItemDetailFragment using roboguice.inject.ExtrasListener$ExtrasMembersInjector@5284c21c.
    Reason: java.lang.IllegalStateException: Can't find the mandatory extra identified by key [place] on field class de.NextBike.activity.ItemDetailFragment.place
    while locating de.NextBike.activity.ItemDetailFragment
    1 error
            at com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:464)
            at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:67)
            at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:977)
            at roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:247)
            at roboguice.fragment.provided.RoboFragment.onCreate(RoboFragment.java:21)
            at de.NextBike.activity.ItemDetailFragment.onCreate(ItemDetailFragment.java:84)
            at android.app.Fragment.performCreate(Fragment.java:1678)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
            at android.app.BackStackRecord.run(BackStackRecord.java:684)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: Can't find the mandatory extra identified by key [place] on field class de.NextBike.activity.ItemDetailFragment.place
            at roboguice.inject.ExtrasListener$ExtrasMembersInjector.injectMembers(ExtrasListener.java:115)
            at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:140)
            at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93)
            at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80)
            at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1059)
            at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80)
            at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62)
            at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:977)
            at roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:247)
            at roboguice.fragment.provided.RoboFragment.onCreate(RoboFragment.java:21)
            at de.NextBike.activity.ItemDetailFragment.onCreate(ItemDetailFragment.java:84)
            at android.app.Fragment.performCreate(Fragment.java:1678)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
            at android.app.BackStackRecord.run(BackStackRecord.java:684)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

I really don't understand why this is happening as this is working for me (in the Detail-Fragment; instead of the @inject):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments().containsKey(ARG_ITEM_PLACE)) {
        this.place = (Place) getArguments().get(ARG_ITEM_PLACE);
    }
}

Maybe someone can shad some light on this for me.

Thanks in advance.

Langusten Gustel
  • 10,917
  • 9
  • 46
  • 59

0 Answers0