android.os.BadParcelableException:ClassNotFoundException解组时:
我不知道为什么会发生这种情况,我无法复制它。 它在控制台里 我真的很抱歉,只是把代码和日志猫,但我甚至不能阅读日志猫,我没有遇到这样的问题之前,我甚至不知道从哪里开始。 任何帮助都将不胜感激 这是原木猫android.os.BadParcelableException:ClassNotFoundException解组时:,android,classnotfoundexception,Android,Classnotfoundexception,我不知道为什么会发生这种情况,我无法复制它。 它在控制台里 我真的很抱歉,只是把代码和日志猫,但我甚至不能阅读日志猫,我没有遇到这样的问题之前,我甚至不知道从哪里开始。 任何帮助都将不胜感激 这是原木猫 android.os.BadParcelableException: ClassNotFoundException when unmarshalling: bitsie.playmee.musicplayer.free.classes.SongDetails at android.os.
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: bitsie.playmee.musicplayer.free.classes.SongDetails
at android.os.Parcel.readParcelableCreator(Parcel.java:2147)
at android.os.Parcel.readParcelable(Parcel.java:2097)
at android.os.Parcel.readValue(Parcel.java:2013)
at android.os.Parcel.readListInternal(Parcel.java:2343)
at android.os.Parcel.readArrayList(Parcel.java:1703)
at android.os.Parcel.readValue(Parcel.java:2034)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1273)
at android.support.v4.app.FragmentManagerImpl.throwException(Unknown Source)
beginTransaction
putFragment
getFragment
saveFragmentInstanceState
dump
makeOpenCloseAnimation
makeFadeAnimation
loadAnimation
moveToState
moveToState
moveToState
addFragment
removeFragment
findFragmentById
findFragmentByTag
enqueueAction
allocBackStackIndex
setBackStackIndex
popBackStackState
restoreAllState
attachActivity
dispatchConfigurationChanged
dispatchCreateOptionsMenu
dispatchPrepareOptionsMenu
dispatchOptionsItemSelected
at android.support.v4.app.FragmentManagerImpl.throwException(Unknown Source)
beginTransaction
putFragment
getFragment
saveFragmentInstanceState
dump
makeOpenCloseAnimation
makeFadeAnimation
loadAnimation
moveToState
moveToState
moveToState
addFragment
removeFragment
findFragmentById
findFragmentByTag
enqueueAction
allocBackStackIndex
setBackStackIndex
popBackStackState
restoreAllState
attachActivity
dispatchConfigurationChanged
dispatchCreateOptionsMenu
dispatchPrepareOptionsMenu
dispatchOptionsItemSelected
at android.support.v4.app.BackStackRecord.run(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.makeInactive(Unknown Source)
attachFragment
execPendingActions
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(Unknown Source)
performPendingDeferredStart
hideFragment
freeBackStackIndex
addBackStackState
dispatchContextItemSelected
dispatchOptionsMenuClosed
transitToStyleIndex
at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(Unknown Source)
finishUpdate
at android.support.v4.view.ViewPager.initViewPager(Unknown Source)
setCurrentItem
setCurrentItemInternal
setCurrentItemInternal
scrollToItem
setPageTransformer
setInternalPageChangeListener
distanceInfluenceForSnapDuration
smoothScrollTo
addNewItem
populate
calculatePageOffsets
infoForChild
recomputeScrollPosition
onPageScrolled
completeScroll
isGutterDrag
determineTargetPage
onSecondaryPointerUp
canScroll
executeKeyEvent
getChildRectInPagerCoordinates
access$000
access$200
at android.support.v4.view.ViewPager.populate(Unknown Source)
requestParentDisallowInterceptTouchEvent
arrowScroll
at android.support.v4.view.ViewPager$3.run(Unknown Source)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:543)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5111)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)
这是这个类的代码
public class SongDetails implements Parcelable
{
public SongDetails( int _ID, String click_no, String Album, String Artist, String Path, String Time, String song, String sortBy, int albumID,
String audioID )
{
this._ID = _ID;
this.click_no = click_no;
this.Album = Album;
this.Artist = Artist;
this.Path = Path;
this.Time = Time;
this.song = song;
this.sortBy = sortBy;
this.albumID = albumID;
this.audioID = audioID;
}
public SongDetails( Parcel in )
{
this._ID = in.readInt( );
this.Path = in.readString();
this.song = in.readString( );
this.Album = in.readString( );
this.Artist = in.readString( );
this.Time = in.readString( );
this.sortBy = in.readString( );
this.click_no = in.readString( );
this.albumID = Integer.parseInt( in.readString( ) );
this.audioID = in.readString( );
}
@Override
public int describeContents( )
{
return 0;
}
@Override
public void writeToParcel( Parcel dest, int flags )
{
dest.writeInt( _ID );
dest.writeString( Path );
dest.writeString( song );
dest.writeString( Album );
dest.writeString( Artist );
dest.writeString( Time );
dest.writeString( sortBy );
dest.writeString( click_no );
dest.writeString( String.valueOf( albumID ) );
dest.writeString( audioID );
}
public static final Parcelable.Creator < SongDetails > CREATOR = new Parcelable.Creator < SongDetails >( ) {
public SongDetails createFromParcel( Parcel in )
{
return new SongDetails( in );
}
public SongDetails [ ] newArray( int size )
{
return new SongDetails [ size ];
}
};
}
public类SongDetails实现可包裹
{
公共歌曲详细信息(int _ID、字符串点击号、字符串相册、字符串艺术家、字符串路径、字符串时间、字符串歌曲、字符串排序、int相册ID、,
字符串(音频)
{
这个。_ID=_ID;
this.click\u no=单击\u no;
this.Album=Album;
这个。艺术家=艺术家;
this.Path=Path;
这个。时间=时间;
这首歌=这首歌;
this.sortBy=sortBy;
this.albumID=albumID;
this.audioID=audioID;
}
公共信息详细信息(包裹中)
{
这个。_ID=in.readInt();
this.Path=in.readString();
this.song=in.readString();
this.Album=in.readString();
this.Artist=in.readString();
this.Time=in.readString();
this.sortBy=in.readString();
this.click_no=in.readString();
this.albumID=Integer.parseInt(in.readString());
this.audioID=in.readString();
}
@凌驾
公共int描述内容()
{
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志)
{
目标写入项(_ID);
目标写入限制(路径);
目的地写作(歌曲);
目的地笔录(相册);
目的地作家(艺术家);
目的地书面限制(时间);
目的写入限制(sortBy);
目的写入(单击“否”);
dest.writeString(String.valueOf(albumID));
目的写入(音频ID);
}
公共静态最终包裹。CreatorCreator=新包裹。Creator(){
公共歌曲详细信息createFromParcel(包裹中)
{
返回新歌曲详细信息(在中);
}
public SongDetails[]新数组(整数大小)
{
返回新歌曲详细信息[大小];
}
};
}
正在读取包裹数据的活动代码
Bundle bundle = getIntent( ).getExtras( );
if ( bundle != null )
{
if ( GlobalSongList.GetInstance( ).getCheck( ) == 0 )
{
try
{
GlobalSongList.GetInstance( ).setPosition( bundle.getInt( "Data2", 0 ) );
if(bundle.getParcelableArrayList( "Data1" )!=null)
{
ArrayList < SongDetails > list =
bundle.getParcelableArrayList( "Data1" );
GlobalSongList.GetInstance( ).SetNowPlayingList( list );
}
CMDNAME = bundle.getString( IConstant.CMDNAME );
}
catch ( Exception e )
{
// e.printStackTrace( );
}
}
comefrom = bundle.getString( "comefrom" );
isFromRecentAdded = bundle.getBoolean( "fromRecentAdded", false );
click_no = bundle.getString( "click_no_playlist" );
Bundle Bundle=getIntent().getExtras();
if(bundle!=null)
{
if(GlobalSongList.GetInstance().getCheck()==0)
{
尝试
{
GlobalSongList.GetInstance().setPosition(bundle.getInt(“Data2”,0));
if(bundle.getParcelableArrayList(“Data1”)!=null)
{
ArrayListlist=
bundle.getParcelableArrayList(“数据1”);
GlobalSongList.GetInstance().SetNowPlayingList(列表);
}
CMDNAME=bundle.getString(IConstant.CMDNAME);
}
捕获(例外e)
{
//e.printStackTrace();
}
}
comefrom=bundle.getString(“comefrom”);
isFromRecentAdded=bundle.getBoolean(“fromRecentAdded”,false);
单击\u no=bundle.getString(“单击\u no\u播放列表”);
我认为问题在于,在解组歌曲详细信息
列表时,您没有设置类加载器
您可以执行以下操作来读取“Data1”
:
if(bundle.getParcelableArrayList(“Data1”)!=null){
bundle.setClassLoader(SongDetails.class.getClassLoader());
ArrayListlist=bundle.getParcelableArrayList(“数据1”);
//代码的其余部分
}
你能把代码贴在你读的地方吗?@antonio完成了…请看一看我甚至不知道这是否解决了问题。有没有可能会增加问题?我想它应该可以解决你的问题,而不会引起更多的问题。你发现新的错误了吗?嗯,这是我的用户报告的错误,我不能n在我的手机上报告..:(Uff…那就很难调试了…如果我在你那里,我会在我的手机上尝试这个解决方案,看看它在部署到生产环境之前是否会破坏一些东西。你也可以在设置新的类加载器之前保存当前的类加载器
,在取消对数组列表的编组之后,将旧的类加载器设置为>再次捆绑
,以最大限度地减少出现新错误的机会
if(bundle.getParcelableArrayList( "Data1" )!=null) {
bundle.setClassLoader (SongDetails.class.getClassLoader());
ArrayList < SongDetails > list = bundle.getParcelableArrayList( "Data1" );
// Rest of your code
}