Anko: java.lang.NoSuchMethodError: No virtual method getActivity()Landroid/app/Activity; in class Landroid/support/v4/app/Fragment; or its super classes (declaration of 'android.support.v4.app.Fragment' appears in /data/app/org.loop.example-1/base.apk)

Created on 7 Feb 2017  路  9Comments  路  Source: Kotlin/anko

Hey all,

It looks like anko 0.9.1 is crashing with the following stack trace:

```02-07 15:56:16.211 29688 29688 E AndroidRuntime: java.lang.NoSuchMethodError: No virtual method getActivity()Landroid/app/Activity; in class Landroid/support/v4/app/Fragment; or its super classes (declaration of 'android.support.v4.app.Fragment' appears in /data/app/org.loop.example-1/base.apk)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at org.jetbrains.anko.support.v4.SupportContextUtilsKt.getCtx(SupportContextUtils.kt:33)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at com.jongla.soundmash.FirstFragment.onCreateView(FirstFragment.kt:16)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.view.ViewPager.populate(ViewPager.java:1240)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.view.ViewPager.populate(ViewPager.java:1088)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:389)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3143)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.View.measure(View.java:20166)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2644)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1599)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1891)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1487)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7450)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:695)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:631)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.os.Looper.loop(Looper.java:158)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7229)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
02-07 15:56:16.211 29688 29688 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)


I am getting it after `FragmentPagerAdapter.getItem` calls my Fragment's constructor.  My fragment itself is quite simple:

```class FirstFragment: Fragment() {
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View?
            = FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this))
}

and

class FragmentUi<T>: AnkoComponent<T> { override fun createView(ui: AnkoContext<T>) = with(ui) { verticalLayout { textView { text = "foo" } } } }

It seems like SupportContextUtilsKt.getCtx is causing this error so hacking at the problem is difficult - is there any reason it cannot get to the getActivity method of my Fragment. Should I be using another implementation of Fragment (I am using the support.v4 one so that I can use the FragmentPagerAdapter and ViewPager)?

Anko Layouts bug critical fixed

All 9 comments

I am having the same problem for every Anko method that uses getActivity(): android.app.Activity somehow inside Support Fragment

Looks like there is a Stack Overflow question reporting the same issue w/ Toasts.
http://stackoverflow.com/questions/41932223/anko-toast-method-causes-java-lang-nosuchmethoderror-when-called-from-fragment

Looks like this problem does not happen in 0.8.3 but appears with 0.9.1.

I change 'ctx' into 'activity' (since Activity extends Context) and... it work.
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? = FragmentUi<Fragment>().createView(AnkoContext.create(activity, this)) }

Yup, that works!

@mikesol
this bug also doesn't appear in 0.9
ext.anko_version = "0.9"

Yes, I'm also experiencing this with startActivity<>

also happens in

doAsync(exceptionHandler) {
            // something time consuming

            supportFragmentUiThread {
                // do something
            }
        }

hi am having issue with sign in using gmail in my android application.

java.lang.NoSuchMethodError: No virtual method zzait()Ljava/util/ArrayList;

and the error is pointing to addApi(Auth.GOOGLE_SIGN_IN_API, gso).

mGoogleApiClient = new GoogleApiClient.Builder(this)

           .enableAutoManage(this, this)

           .addApi(Auth.GOOGLE_SIGN_IN_API, gso)

           .build();
Was this page helpful?
0 / 5 - 0 ratings