InvocationTargetException on custom textview in android

359 views Asked by At
  • I have a custom Text view
  • Inside the custom text view, I set the fonts

class CustomMediumTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null,
                                                     defStyle: Int = androidx.appcompat.R.attr.titleTextStyle)
    : AppCompatTextView(context, attrs, defStyle) {

    init {
        init(attrs)
    }

    private fun init(attrs: AttributeSet?) {
        if (attrs != null) {
            val myTypeface = ResourcesCompat.getFont(context, R.font.roboto_medium)
            this.typeface = myTypeface
        }
    }

}

I encountered crash in firebase this happens rarely and not able to replicate

Error:

Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:858)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1014)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:663)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95)
       at com.sample.androidapp.kotlin.views.fragments.BroadcastContainerFragment.onCreateView(BroadcastContainerFragment.java:97)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2961)
       at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:504)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:259)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1793)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1711)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1654)
       at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:488)
       at android.os.Handler.handleCallback(Handler.java:914)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:225)
       at android.app.ActivityThread.main(ActivityThread.java:7563)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994)

How to resolve this crash and fix it so it never occurs

1

There are 1 answers

0
Yura On

try this with implementation of all constructors, should work

class CustomMediumTextView : AppCompatTextView {

    constructor(context: Context) : super(context) {
        init(context, null)
    }

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
        init(context, attrs)
    }

    constructor(context: Context, attrs: AttributeSet?, style: Int) : super(context, attrs, style) {
        init(context, attrs)
    }

    private fun init(context: Context, attrs: AttributeSet?) {
        if (attrs != null) {
            val myTypeface = ResourcesCompat.getFont(context, R.font.roboto_medium)
            this.typeface = myTypeface
        }
    }
}