`

android.app.Fragment$InstantiationException 解决办法

 
阅读更多

android.app.Fragment$InstantiationException 解决办法

 

        在实际的开发中,我遇到过两次android.app.Fragment$InstantiationException报错。

        其中一次报错,根据报错提示 “make sure class name exists, is public, and has an empty constructor that is public” ,若Fragement定义有带参构造函数,则一定要定义public的默认的构造函数。即可解决此问题。如果硬要携带参数进去,可以通过Intent结合Bunble的方式携带进去。 

        第二次报错如下贴的log信息,在“is public, and has an empty constructor that is public” 都满足的情况下,编译ENG版本运行没有任何问题,但是编译USER版本就会出现CRASH错误。原因在于USER版本编译时会代码混淆。

E/AndroidRuntime( 3253): FATAL EXCEPTION: main

E/AndroidRuntime( 3253): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.settings.mcwill.McWiLLSettings: make sure class name exists, is public, and has an empty constructor that is public

E/AndroidRuntime( 3253):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1964) 
E/AndroidRuntime( 3253):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1989) 
E/AndroidRuntime( 3253):     at android.app.ActivityThread.access$600(ActivityThread.java:126) 
E/AndroidRuntime( 3253):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1155) 
E/AndroidRuntime( 3253):     at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 3253):     at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime( 3253):     at android.app.ActivityThread.main(ActivityThread.java:4482) 
E/AndroidRuntime( 3253):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3253):     at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime( 3253):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
E/AndroidRuntime( 3253):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
E/AndroidRuntime( 3253):     at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime( 3253): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.settings.mcwill.McWiLLSettings: make sure class name exists, is public, and has an empty constructor that is public 
E/AndroidRuntime( 3253):     at android.app.Fragment.instantiate(Fragment.java:581) 
E/AndroidRuntime( 3253):     at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1120) 
E/AndroidRuntime( 3253):     at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1136) 
E/AndroidRuntime( 3253):     at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:532) 
E/AndroidRuntime( 3253):     at com.android.settings.Settings.onCreate(Settings.java:99) 
E/AndroidRuntime( 3253):     at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime( 3253):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
E/AndroidRuntime( 3253):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928) 
E/AndroidRuntime( 3253):     ... 11 more 
E/AndroidRuntime( 3253): Caused by: java.lang.ClassNotFoundException: com.android.settings.mcwill.McWiLLSettings 
E/AndroidRuntime( 3253):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
E/AndroidRuntime( 3253):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
E/AndroidRuntime( 3253):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
E/AndroidRuntime( 3253):     at android.app.Fragment.instantiate(Fragment.java:571) 
E/AndroidRuntime( 3253):     ... 18 more 
W/ActivityManager(  422):   Force finishing activity com.android.settings/.SubSettings 
W/ActivityManager(  422):   Force finishing activity com.android.settings/.Settings 

        解决办法: 

        在对应模块的proguard.flags文件中引入该Fragment所在的类包即可。比如: -keep class com.android.settings.wifi.*Settings

分享到:
评论

相关推荐

    TabLayout实现顶部tab选项卡,类似百度外卖登陆界面的tab选项卡

    <com.google.android.material.tabs.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:tabMode="scrollable" /> ``` 4. **...

    Android support.v7包

    Android support.v7包

    最新!!!安卓开发——Fragment应用实战

    基于新包 androidx.fragment.app.Fragment androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentTransaction 一个帮助你学习fragment的练手项目

    Fragment两种

    ( 1 ) android.app.Fragment:兼容的最低版本是android:minSdkVersion="11" 因此你的应用不能兼容3.0以下的应用。 可以使用<fragment>标签的,这点很重要,如果是用android.support.v4.app.Fragment的话,是不能是...

    Android Fragment学习

    一:Fragment简介 3:MainActivity代码详情 ... import android.os.Bundle...import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransa

    androidx-fragment-1.1.0.aar

    androidx-fragment-1.1.0.aar

    FragmentTabHost的基本使用

    <androidx.fragment.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.fragment.app.FragmentTabHost> ``` 接...

    Android开发实现Fragment监听返回键事件功能的方法

    本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下: 前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析...

    资讯阅读,通过CBReader

    import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import ...

    Xamarin.Android 关于静态使用Fragment的简单示例

    在Xamarin.Android中,我们可以使用`Android.Support.V4.App.Fragment`或`AndroidX.Fragment.App.Fragment`(对于新项目推荐使用)来创建和管理Fragment。 要静态地添加Fragment,我们首先需要在布局XML文件中定义...

    开源中国源码学习UI篇(一)之FragmentTabHost的使用分析

    首先,FragmentTabHost是Android Support Library中的一个类,主要用于在TabHost的基础上支持Fragment的使用。TabHost本身是Android提供的一个容器,可以用来创建带有多个标签页的界面,每个标签页对应一个Activity...

    FragmentView

    将fragment和listview结合使用 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, null); ...

    安卓app开发之Android Fragment使用教程.zip

    安卓app开发之Android Fragment使用教程.zip

    Android Fragment简单应用

    Fragment类需要继承自`androidx.fragment.app.Fragment`(注意:由于AndroidX库的引入,我们不再使用原生的`android.app.Fragment`)。在`DemoFragment`类中,我们创建一个简单的布局,并在`onCreateView`方法中返回...

    AndroidX下使用Activity和Fragment的变化详解

    AndroidX 下使用 Activity 和 Fragment 的变化详解 AndroidX 是 Android 的一个主要组件之一,它提供了许多新的 API 和功能来帮助开发者提高开发效率和代码质量。在 AndroidX 中,Activity 和 Fragment 是两个非常...

    安卓兼容包 android-support-v4.jar

    用于兼容安卓3.0以下的版本,拥有自己特殊的fragment控件

    Android基础编程-Fragment介绍.pptx

    需要注意的是,Android提供了两种Fragment实现:android.app.Fragment和android.support.v4.app.Fragment。前者是从Android 3.0(API级别11)开始引入的,而后者是Android Support Library的一部分,可以支持更低...

    android Fragment v4版实现

    `android.support.v4.app.Fragment`是Google提供的一个兼容库,使得开发者可以在Android 2.1(API级别7)及更高版本上使用Fragment功能。在标题提到的“android Fragment v4版实现”中,我们将探讨如何正确地在项目...

    android fragment实现按钮切换

    1. **创建Fragment类**:首先,我们需要为每个要切换的界面创建一个Fragment类,继承自android.app.Fragment或者androidx.fragment.app.Fragment。每个Fragment类内部应包含对应的布局文件,并在onCreateView()方法...

    popupwindow fragment 合用

    在Android SDK中,Fragment有两个版本:一个是支持库中的androidx.fragment.app.Fragment(或旧版的android.support.v4.app.Fragment),另一个是原生的android.app.Fragment。v4支持库是为了兼容低版本Android系统...

Global site tag (gtag.js) - Google Analytics