Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在play store上发布应用程序,几天后将这些错误输入;交通意外及意外;ANRs";_Android_Android Fragments - Fatal编程技术网

Android 在play store上发布应用程序,几天后将这些错误输入;交通意外及意外;ANRs";

Android 在play store上发布应用程序,几天后将这些错误输入;交通意外及意外;ANRs";,android,android-fragments,Android,Android Fragments,我本人从未见过这个错误,也不知道如何重现它。 我能就这个问题提出一些建议吗 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.ap

我本人从未见过这个错误,也不知道如何重现它。 我能就这个问题提出一些建议吗

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);

如果我没记错的话,这里是你的LogCat说的“没有空构造函数”

基本上,当对片段进行子类化时,如果要创建不同的构造函数,则需要提供空构造函数

正如上面所说:

Fragment的所有子类必须包含一个公共空构造函数。 框架通常会在需要时重新实例化片段类, 尤其是在状态恢复期间,需要能够找到 构造函数来实例化它。如果空构造函数不是 如果可用,则在状态期间的某些情况下会发生运行时异常 恢复


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

具有公共的空构造函数

您可以通过以下方式更改构造函数来解决问题:

public MainTabFragment(LatteApplication _latte) {
    latte = _latte;
}
为此:

public MainTabFragment() {}
如果在创建片段时需要将对象传递给片段,请使用一组参数(您的自定义类LatteApplication需要实现Parcelable或Serializable,这里我给您一个Parcelable的示例):

然后在片段方法中,例如在onActivityCreated中,检索如下参数:

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

您可以检查以查看可以通过Bundle传递的内容…

请将代码发布到MainTabFragment。正如你自己指出的,这很可能是你有错误的地方…嗯,这对我来说是新的。你说的空构造函数是指没有参数,里面什么都没有?我的意思是:public MyFragment(){}谢谢你,我错过了我需要空构造函数的机会。这将解决我申请中的许多问题。很高兴我能提供帮助。您是让LatteApplication实现Parcelable/Serializable,还是只使用Bundle将相关变量从该类传递到片段,主要取决于LatteApplication类的复杂性/大小。如果您对此不清楚,请毫不犹豫地询问;)LatteApplication是几乎所有内容、所有应用程序/服务器事件的主要占位符,大部分内容都在这里处理。片段对我来说是很新的,有一件事我不明白,为什么我不能在创建它之后将其作为setter传递?因此,让构造函数为空。最好尽可能保持片段的独立性,尽量只给它在包中实例化所需的对象。如果您的应用程序中到处都需要全局变量,您可以扩展应用程序类或使用静态单例:
Bundle args = getArguments();
if (args != null){
    LatteApplication _latte = args.getParcelable("latte_application");
}