在Play商店中发布了应用程序,几天后在"Crashes& ANRs"中出现这些错误



我自己从未见过这个错误,也不知道如何复制它。我可以就这个问题有一些建议吗?

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.domain.app/net.domain.app.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment net.domain.app.fragments.main.MainTabFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.access$700(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment net.domain.app.fragments.main.MainTabFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:413)
at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)
at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1790)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:213)
at net.domain.app.MainActivity.onCreate(MainActivity.java:104)
at android.app.Activity.performCreate(Activity.java:5372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
... 11 more
Caused by: java.lang.InstantiationException: can't instantiate class net.domain.app.fragments.main.MainTabFragment; no empty constructor
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1130)
at android.support.v4.app.Fragment.instantiate(Fragment.java:402)
... 18 more

它与:

有关
net.domain.app.fragments.main.MainTabFragment: make sure class name exists, is public, and has an empty constructor that is public

我尝试的任何设备都不会失败,班级存在,是公开的,并且具有公共构造函数

主要活动中的第104行是 super.oncreate(savedinstancestate);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

这是维护fragment

您的片段没有空的构造函数,这就是导致错误的原因:

有一个空的构造函数

您可以通过更改构造函数来克服问题:

public MainTabFragment(LatteApplication _latte) {
    latte = _latte;
}

public MainTabFragment() {}

如果您需要在创建片段时将对象传递到片段,请使用一组参数(您的自定义类latteApplication需要实现包裹或序列化,在这里我为您提供一个包裹式的示例):

>
LatteApplication _latte;
//initialize that object
// Then do this when creating your Fragment
Bundle args = new Bundle();
args.putParcelable("latte_application", _latte);
MainTabFragment fragment = new MainTabFragment();
fragment.setArguments(args);
//then add your Fragment to your layout.

然后,在片段方法中,例如在肿瘤中,以这样的参数检索:

Bundle args = getArguments();
if (args != null){
    LatteApplication _latte = args.getParcelable("latte_application");
}

您可以检查文档以查看可以通过捆绑包的内容...

如果我没有错

基本上,当子类片段时,您需要提供空构造函数如果您的目的是创建不同的构造。

如文档所说:

碎片的所有子类都必须包括一个公共空的构造函数。 该框架通常会在需要时重新构成片段类, 特别是在州还原期间,需要能够找到这个 实例化的构造函数。如果空构造函数不是 可用,在某些情况下,在某些情况下会发生运行时例外 还原。

最新更新