zeugma-solutions / locale-helper-android

Change Language Programmatically in Android
https://gunhansancar.com/change-language-programmatically-in-android/
Apache License 2.0
370 stars 66 forks source link

LocaleAwareCompatActivity.java line 21 #42

Closed yoobi closed 2 years ago

yoobi commented 3 years ago

Hello, I'm using your nice library on my application but some of my user are getting issue, I couldn't reproduce it :/

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.application.beta/com.my.application.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment f.a.a.a.k.e.a: could not find Fragment constructor
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6944)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment f.a.a.a.k.e.a: could not find Fragment constructor
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:628)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2728)
       at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1890)
       at androidx.fragment.app.Fragment.onCreate(Fragment.java:1867)
       at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:264)
       at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
       at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3061)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:276)
       at com.zeugmasolutions.localehelper.LocaleAwareCompatActivity.onCreate(LocaleAwareCompatActivity.java:21)
       at com.my.application.MainActivity.onCreate(MainActivity.java:41)
       at android.app.Activity.performCreate(Activity.java:7183)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6944)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by java.lang.NoSuchMethodException: <init> []
       at java.lang.Class.getConstructor0(Class.java:2320)
       at java.lang.Class.getConstructor(Class.java:1725)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:613)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2728)
       at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1890)
       at androidx.fragment.app.Fragment.onCreate(Fragment.java:1867)
       at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:264)
       at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
       at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3061)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:276)
       at com.zeugmasolutions.localehelper.LocaleAwareCompatActivity.onCreate(LocaleAwareCompatActivity.java:21)
       at com.my.application.MainActivity.onCreate(MainActivity.java:41)
       at android.app.Activity.performCreate(Activity.java:7183)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6944)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

I'm using class MainActivity : LocaleAwareCompatActivity() and class MyApplication: LocaleAwareApplication()

at first I though it was because of my Fragment so I changed it to a 0-arg constructor but I still get the issue.

gunhansancar commented 3 years ago

This looks like Proguard issue but I am not sure. Maybe the issue is still happening on some of your users who has not updated to the latest version of your app? Also, may I ask why would you have arguments on Fragment constructor?

gunhansancar commented 3 years ago

Also, can you give more information e.g. what version of android what kind of device? How is this triggered?

yoobi commented 3 years ago

Hello !

may I ask why would you have arguments on Fragment constructor?

The argument in Fragment constructor was simple the layout Fragment(R.layout.myFragment) so nothing fancy.

Can you give more information e.g. what version of android what kind of device? How is this triggered?

Sure thing ! Phone model : Galaxy S7 edge Android version: 8.0.0 As for what triggered it I don't know, my guess is the application must have gone in background and when going back to it to recreate Fragment it has issue. There is a DialogFragment in some views so it might be related to it.

khan878 commented 2 years ago

Hello, The same issue happening to me, It happens in Android 8 or above. Please solve this. Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{..MainActivity}: androidx.fragment.app.Fragment$b: Unable to instantiate fragment g.a.a.l.a.e0: could not find Fragment constructor

yoobi commented 2 years ago

@AbuzarAhmadi It was an error in my code, I think it should be the same for you so check your Fragment constructor