ClassNotFoundException

ClassNotFoundException

本文介绍了更改屏幕方向时为什么会有ClassNotFoundException?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

旋转设备时出现ClassNotFoundException。将admob库com.google.android.gms:play-services-ads:17.2.0添加到我的项目后,发生了错误。没有这个库,一切都会正常。

I get ClassNotFoundException when i rotate my device. The error occured after I added admob library com.google.android.gms:play-services-ads:17.2.0 to my project. Without this libary everything works fine.

我试图将库版本更改为16.0.0,在此版本中不需要应用程序ID,不会发生错误。

I tried to change the library version to 16.0.0 where the application ID was not necessary, the error does not occure.

2019-04-09 19:32:16.164 12689-12718/com.example.example.myapplication E/Parcel: Class not found when unmarshalling: android.support.v4.app.FragmentManagerState
    java.lang.ClassNotFoundException: android.support.v4.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:400)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2564)
        at android.os.Parcel.readParcelable(Parcel.java:2518)
        at android.os.Parcel.readValue(Parcel.java:2421)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2788)
        at android.os.BaseBundle.unparcel(BaseBundle.java:271)
        at android.os.Bundle.getBundle(Bundle.java:817)
        at fw.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):33)
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):145)
        at cf.a(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):160)
        at k.onTransact(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):4)
        at android.os.Binder.transact(Binder.java:499)
        at com.google.android.gms.internal.measurement.zzq.zza(Unknown Source)
        at com.google.android.gms.internal.measurement.zzdp.onActivityCreated(Unknown Source)
        at com.google.android.gms.internal.measurement.zzex.zzgd(Unknown Source)
        at com.google.android.gms.internal.measurement.zzea$zzb.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:760)
     Caused by: java.lang.ClassNotFoundException: android.support.v4.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:400) 
        at android.os.Parcel.readParcelableCreator(Parcel.java:2564) 
        at android.os.Parcel.readParcelable(Parcel.java:2518) 
        at android.os.Parcel.readValue(Parcel.java:2421) 
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2788) 
        at android.os.BaseBundle.unparcel(BaseBundle.java:271) 
        at android.os.Bundle.getBundle(Bundle.java:817) 
        at fw.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):33) 
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):145) 
        at cf.a(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):160) 
        at k.onTransact(:com.google.android.gms.dynamite_measurementdynamite@16089051@16.0.89 (040408-239467275):4) 
        at android.os.Binder.transact(Binder.java:499) 
        at com.google.android.gms.internal.measurement.zzq.zza(Unknown Source) 
        at com.google.android.gms.internal.measurement.zzdp.onActivityCreated(Unknown Source) 
        at com.google.android.gms.internal.measurement.zzex.zzgd(Unknown Source) 
        at com.google.android.gms.internal.measurement.zzea$zzb.run(Unknown Source) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:760) 
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我的MainActivity.java是

My MainActivity.java is


public class MainActivity extends AppCompatActivity {
    final Fragment[] fragments = new Fragment[3];
    BottomNavigationView navView;
    FragmentManager fragmentManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");

        fragmentManager = getSupportFragmentManager();

        Toolbar toolbar = findViewById(R.id.toolbar);
        toolbar.setTitle(getString(R.string.app_name));
        toolbar.setTitleTextColor(Color.WHITE);
        toolbar.setNavigationIcon(R.drawable.ic_navigation);



        navView = findViewById(R.id.nav_view);


        AdView adView = findViewById(R.id.adView);
        adView.loadAd(new AdRequest.Builder().build());


        fragments[0] = new RandomFragment();
        fragments[1] = new FullListFragment();
        fragments[2] = new FavoriteFragment();

        fragmentManager.beginTransaction().add(R.id.main_container2, fragments[0]).commit();


        navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {

            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                Fragment fragment;

                switch (menuItem.getItemId()) {
                    case R.id.navigation_home:
                        fragment = fragments[0];
                        break;

                    case R.id.navigation_dashboard:
                        fragment = fragments[1];
                        break;


                    case R.id.navigation_notifications:
                        fragment = fragments[2];
                        break;

                    default:
                        fragment = fragments[0];
                        break;
                }
                fragmentManager.beginTransaction().replace(R.id.main_container2, fragment).commit();
                return true;
            }
        });
        navView.setSelectedItemId(R.id.navigation_home);
    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putInt("SelectedItemId", navView.getSelectedItemId());

    }


    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        int selectedItemId = savedInstanceState.getInt("SelectedItemId");
        navView.setSelectedItemId(selectedItemId);
    }


}


推荐答案

经过漫长的思考。我有答案。
在新的库中添加了带有应用程序ID的ads初始化方法的ads初始化方法,没有内部类SavedState。因此,所有需要的都是这样来保存appid:

After longest thinkings. I've got answer.In new library added ads initialization method with app id witch does not have an inner class SavedState. So all is need it's save appid like this:

private static final String APP_ID = "your_app_id"

 @Override
    protected void onCreate(Bundle savedInstanceState) {
Bundle adsInstanceState = (savedInstanceState != null)
                ? savedInstanceState.getBundle(APP_ID): null;
        super.onCreate(adsInstanceState);
MobileAds.initialize(this,APP_ID);
}

  @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Bundle adsInstanceState = new Bundle();
        outState.putBundle(APP_ID, adsInstanceState )
   }

类似的问题,但有地图:

希望对某人有帮助

Similar problem but with maps:https://stackoverflow.com/a/36818004/11334749Hope this help for someone

这篇关于更改屏幕方向时为什么会有ClassNotFoundException?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 16:04