java ClassCastException在为数字对象实现Parcelable时
我正在调用MovieDatabase API,它返回的一个对象是一个数字,请参见文档here
我正在我的电影对象类中实现parcelable,目前正在尝试相应地读写:
阅读
protected Movie(Parcel in) {
vote_count = in.readInt();
id = in.readInt();
video = in.readByte() != 0;
title = in.readString();
popularity = in.readFloat();
poster_path = in.readString();
original_language = in.readString();
original_title = in.readString();
genre_ids = in.createStringArrayList();
backdrop_path = in.readString();
adult = in.readByte() != 0;
overview = in.readString();
release_date = in.readString();
vote_average = in.readInt();
}
写
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(vote_count);
parcel.writeInt(id);
parcel.writeByte((byte) (video ? 1:0));
parcel.writeString(title);
parcel.writeFloat(popularity);
parcel.writeString(poster_path);
parcel.writeString(original_language);
parcel.writeString(original_title);
parcel.writeStringList(genre_ids);
parcel.writeString(backdrop_path);
parcel.writeByte((byte) (adult ? 1:0));
parcel.writeString(overview);
parcel.writeString(release_date);
parcel.writeInt((Integer) vote_average);
}
我在尝试实现时收到ClassCastException:
java.lang.ClassCastException: com.google.gson.internal.LazilyParsedNumber cannot be cast to java.lang.Integer
at popularmovies.troychuinard.com.popularmovies.Model.Movie.writeToParcel(Movie.java:204)
at 安卓.os.Parcel.writeParcelable(Parcel.java:1496)
at 安卓.os.Parcel.writeValue(Parcel.java:1402)
at 安卓.os.Parcel.writeArrayMapInternal(Parcel.java:724)
at 安卓.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at 安卓.os.Bundle.writeToParcel(Bundle.java:1157)
at 安卓.os.Parcel.writeBundle(Parcel.java:764)
at 安卓.content.Intent.writeToParcel(Intent.java:8687)
at 安卓.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082)
at 安卓.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at 安卓.app.Activity.startActivityForResult(Activity.java:4225)
at 安卓.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at 安卓.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
at 安卓.app.Activity.startActivityForResult(Activity.java:4183)
at 安卓.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
at 安卓.app.Activity.startActivity(Activity.java:4522)
at 安卓.app.Activity.startActivity(Activity.java:4490)
at popularmovies.troychuinard.com.popularmovies.MainActivity$MyAdapter$1.onClick(MainActivity.java:202)
at 安卓.view.View.performClick(View.java:5637)
at 安卓.view.View$PerformClick.run(View.java:22429)
at 安卓.os.Handler.handleCallback(Handler.java:751)
at 安卓.os.Handler.dispatchMessage(Handler.java:95)
at 安卓.os.Looper.loop(Looper.java:154)
at 安卓.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:776)
更新
以下是具体内容:
parcel.writeInt((Integer) vote_average);
# 1 楼答案
尝试使用:
由于错误表示无法将LazlyParsedNumber解析为整数,因此它必须是基于this class的对象。此类提供了方法intValue(),该方法将返回一个int
# 2 楼答案
如果
vote_average
变量是LazilyParsedNumber
,那么需要对该变量调用intValue()
以获得整数vote_average.intValue();