首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整型安卓的ArrayList打包

整型安卓的ArrayList打包
EN

Stack Overflow用户
提问于 2016-06-23 18:14:04
回答 1查看 1.1K关注 0票数 3

我有一个想要传递给另一个活动的自定义类,我读到过这样做的一个好方法是使用Parcelable接口。

代码语言:javascript
复制
public class MatchData implements Parcelable{

    private long mId;
    private int kills, assists, deaths, creeps, ssp1, ssp2, playerRole;
    private String type;
    private String champion;
    private ArrayList<Integer> items;
    private boolean won;

    MatchData(long m, int k, int d, int a, String id, int cr, int s1, int s2, int pr, String t, ArrayList<Integer> it, boolean w) {
        mId = m;
        kills = k;
        assists = a;
        deaths = d;
        champion = id;
        creeps = cr;
        ssp1 = s1;
        ssp2 = s2;
        playerRole = pr;
        type = t;
        items = it;
        won = w;
    }

    MatchData(Parcel in) {
        mId = in.readInt();
        kills = in.readInt();
        deaths = in.readInt();
        assists = in.readInt();
        champion = in.readString();
        creeps = in.readInt();
        ssp1 = in.readInt();
        ssp2 = in.readInt();
        playerRole = in.readInt();
        type = in.readString();
        items = new ArrayList<>();
        in.readList(items, null);  // right here
        won = Boolean.valueOf(in.readString());
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeLong(this.getmId());
        out.writeInt(this.getKills());
        out.writeInt(this.getDeaths());
        out.writeInt(this.getAssists());
        out.writeString(this.getChampion());
        out.writeInt(this.getCreeps());
        out.writeInt(this.getSsp1());
        out.writeInt(this.getSsp2());
        out.writeInt(this.getPlayerRole());
        out.writeString(this.getType());
        out.writeList(this.getItems());
        out.writeString(String.valueOf(this.isWon()));
    }

    public static final Parcelable.Creator<MatchData> CREATOR = new Parcelable.Creator<MatchData>() {
        public MatchData createFromParcel(Parcel in) {
            return new MatchData(in);
        }

        public MatchData[] newArray(int size) {
            return new MatchData[size];
        }
    };

}

我没有复制getter和setter,但它们确实存在。当我试图从包裹中读取整数数组列表(我注释了该行)时,我面临的问题就来了。

编辑:我将该行中的null替换为Integer.class.getClassLoader(),这是新的堆栈跟踪

代码语言:javascript
复制
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime: FATAL EXCEPTION: main
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime: Process: com.nicu.bogdan.lolstats, PID: 2429
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nicu.bogdan.lolstats/com.nicu.bogdan.playerInfo.MatchActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@24a39bfa: Unmarshalling unknown type code 4915278 at offset 168
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:  Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@24a39bfa: Unmarshalling unknown type code 4915278 at offset 168
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readValue(Parcel.java:2228)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readListInternal(Parcel.java:2526)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readList(Parcel.java:1661)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.nicu.bogdan.jsonParser.MatchData.<init>(MatchData.java:140)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.nicu.bogdan.jsonParser.MatchData$1.createFromParcel(MatchData.java:167)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.nicu.bogdan.jsonParser.MatchData$1.createFromParcel(MatchData.java:165)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readParcelable(Parcel.java:2252)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readValue(Parcel.java:2152)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.BaseBundle.unparcel(BaseBundle.java:221)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Bundle.getParcelable(Bundle.java:755)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.content.Intent.getParcelableExtra(Intent.java:5088)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.nicu.bogdan.playerInfo.MatchActivity.onCreate(MatchActivity.java:43)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5990)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
06-23 13:26:35.479 2429-2429/com.nicu.bogdan.lolstats E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
EN

回答 1

Stack Overflow用户

发布于 2016-06-23 18:22:42

Integer在默认情况下是不可打包的。试试这个:

代码语言:javascript
复制
in.readList(ids, Integer.class.getClassLoader());
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37988692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档