Google Playのクラッシュログにクラッシュが見られ、本当に困惑しています。
Java.lang.RuntimeException:
at Android.app.ActivityThread.performLaunchActivity (ActivityThread.Java:3086)
at Android.app.ActivityThread.handleLaunchActivity (ActivityThread.Java:3229)
at Android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.Java:78)
at Android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.Java:108)
at Android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.Java:68)
at Android.app.ActivityThread$H.handleMessage (ActivityThread.Java:1926)
at Android.os.Handler.dispatchMessage (Handler.Java:106)
at Android.os.Looper.loop (Looper.Java:214)
at Android.app.ActivityThread.main (ActivityThread.Java:6981)
at Java.lang.reflect.Method.invoke (Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:1445)
Caused by: androidx.fragment.app.Fragment$InstantiationException:
at androidx.fragment.app.Fragment.instantiate (Fragment.Java:462)
at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.Java:50)
at androidx.fragment.app.FragmentState.instantiate (FragmentState.Java:80)
at androidx.fragment.app.FragmentManagerImpl.restoreAllState (FragmentManager.Java:3109)
at androidx.fragment.app.FragmentController.restoreAllState (FragmentController.Java:158)
at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.Java:344)
at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.Java:85)
at com.autotask.jbarra.kotlinmvvm.MainActivity.onCreate (MainActivity.kt:102)
at Android.app.Activity.performCreate (Activity.Java:7326)
at Android.app.Activity.performCreate (Activity.Java:7317)
at Android.app.Instrumentation.callActivityOnCreate (Instrumentation.Java:1271)
at Android.app.ActivityThread.performLaunchActivity (ActivityThread.Java:3066)
Caused by: Java.lang.NoSuchMethodException:
at Java.lang.Class.getConstructor0 (Class.Java:2328)
at Java.lang.Class.getConstructor (Class.Java:1725)
at androidx.fragment.app.Fragment.instantiate (Fragment.Java:443)
実は、メインアクティビティの102行目は特別なものではありません
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) //This is line 102
何が原因でしょうか? oncreateがそのようなメソッドをスローしないのはなぜですか?一部のユーザーのデバイスで発生しており、再現することができません。
アクティビティはインスタンス状態バンドルから復元されています。復元操作の一部は、フラグメントの再作成です。
アクティビティにフラグメントがあり、フラグメントクラスにはフレームワークに必要な0引数のコンストラクターがありません。
私のアクティビティには、deperecatedコンストラクタを使用していたFragmentPagerAdapter
がありました。私が変更され
class MyPagerAdapter(
fragmentManager: FragmentManager,
private val myActivity: MyActivity
) : FragmentPagerAdapter(fragmentManager) // DEPRECATED
に
class MyPagerAdapter(
fragmentManager: FragmentManager,
private val myActivity: MyActivity
) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
問題を修正したようです
いくつかの検索の後、私は最終的に問題を修正しました。 3つのことを確認する必要があります。
null
かどうかを確認する必要があります(そうしないと、NullPointerExceptionが発生します)サンプルコード例:
public class MyDialogFragment extends DialogFragment{
private String id;
public static MyDialogFragment newInstance(String id) {
MyDialogFragment f = new MyDialogFragment ();
Bundle args = new Bundle();
if(id!= null){
args.putString("id", id);
}
f.setArguments(args);
return f;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
id= savedInstanceState.getString("id");
}
}
}