Vra

Ek probeer om die pakkeerbaar te implementeer in plaas van serializble, want dit is veronderstel om doeltreffender te wees. Vanuit my hoofaktiwiteit wil ek 'n boodskapvoorwerp aan 'n ander aktiwiteit deurgee, my klasboodskap bevat ander klasse. As ek verby hierdie een fout kom, sal ek seker wees dat ek by baie meer van hulle sal ingaan, maar op die oomblik as ek my app probeer bestuur

Dit is my boodskapklas:

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;

public class Message implements Parcelable {

    int id;
    int space_id;
    String text;
    String html;
    String created_at;
    int[] comments;
    boolean is_liked;
    int[] liked_by;
    int[] starred_by;
    boolean is_starred;
    boolean is_followed;
    int[] followed_by;
    ArrayList<AttachmentsData> attachments;
    String url;
    int[] tags;
    boolean is_system;

    public User created_by;
    public Permissions persmissions;
    public Embed embed;
    public Tokens[] tokens;


    /** Parcelable **/
    public Message(Parcel in) {
        readFromParcel(in);
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) { 
        dest.writeInt(id);
        dest.writeInt(space_id);
        dest.writeString(text);
        dest.writeString(html);
        dest.writeString(created_at);
        dest.writeIntArray(comments);
        dest.writeInt(is_liked ? 1 : 0);
        dest.writeIntArray(liked_by);
        dest.writeIntArray(starred_by);
        dest.writeInt(is_starred ? 1 : 0);
        dest.writeInt(is_followed ? 1 : 0);
        dest.writeIntArray(followed_by);
        dest.writeList(attachments);
        dest.writeString(url);
        dest.writeIntArray(tags);
        dest.writeInt(is_system ? 1 : 0);

        dest.writeParcelable(created_by, flags);
        dest.writeParcelable(persmissions, flags);
        dest.writeParcelable(embed, flags);
        dest.writeParcelableArray(tokens, flags);
    }

    private void readFromParcel(Parcel in) {
        id = in.readInt();
        space_id = in.readInt();
        text = in.readString();
        html = in.readString();
        created_at = in.readString();
        //in.readIntArray(comments);
        comments = in.createIntArray();
        is_liked = in.readInt() == 0;
        //in.readIntArray(liked_by);
        liked_by = in.createIntArray();
        //in.readIntArray(starred_by);
        starred_by = in.createIntArray();
        is_starred = in.readInt() == 0;
        is_followed = in.readInt() == 0;
        //in.readIntArray(followed_by);
        followed_by = in.createIntArray();
        in.readList(attachments, AttachmentsData.class.getClassLoader());
        url = in.readString();
        //in.readIntArray(tags);
        tags = in.createIntArray();
        is_system = in.readInt() == 0;

        created_by = in.readParcelable(User.class.getClassLoader());
        persmissions = in.readParcelable(Permissions.class.getClassLoader());
        embed = in.readParcelable(Embed.class.getClassLoader());
        tokens = in.readParcelable(Tokens.class.getClassLoader();
    }   

    public static final Parcelable.Creator<Message> CREATOR = new Parcelable.Creator<Message>() {

        public Message createFromParcel(Parcel in) {
            return new Message(in);
        }

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



    /** Getters and setters, I'll spare you these **/

 }

En dit is die fout wat ek kry:

Fatale uitsondering: Main java.lang.RuntimeException: Kan nie die aktiwiteit ComponentInfo {com.example.incent of com.example.incentive.comments}: java.lang.classcascastexception: android.os.parcelable [] kan nie op com. Voorbeeld.incentive.messagemodel.tokens [] by android.app.activitythread.performlaunchactivity (Activitythread.java:1967) by Android.App.ActivityThread.HandLelAunchActivity (ActivityThread.Java:1992) by Android.App.ActivityThread.access $ 600 (ActivityThread .java: 127) by Android.App.ActivityThread $ H.Handlemessage (ActivityThread.Java:1158) by Android.os.handler.dispatchMessage (Handler.java:99) op Android.os.looper.lop (Looper.java:: 137) by Android.App.ActivityThread.Main (ActivityThread.Java:4441) op java.lang.reflect.method.invokenative (inheemse metode) op java.lang.reflect.method.invoke (metode.java:511) op com .Android.internal.os.zygoteinit $ methodandArgscaller.run (zygoteinit.java:784) op com.android.internal.os.zygoteinit.main (zygoteinit.java:551) op dalvik.system.nativerestart.main (Naturelle metode) veroorsaak deur: java.lang.classcastException: android.os.parcelable [] kan nie na com.example.incentive.messagemodel.tokens [] op com.example.incentive.messagemodel.message.readFromPromparcel (boodskap. Java: 94) by com.example.incentive.messagemodel.Message. (Message.Java:35) by com.example.incentive.messageModel.Message $ 1.CreateFromparcel (Message.Java:100) op com.example.Incential.MessageModel .Message $ 1.CreateFromparcel (Message.Java:1) by Android.os.parcel.readparcelable (Parcel.java:1992) by Android.os.parcel.readValue (Parcel.java:1854) by Android.os.parcel.readMapinteral (Parcel.java:2094) by Android.os.bundle.unparcel (bundel.java:223) by android.os.bundle.getParcelable (bundel.java:1158) op com.example.incentive.oncreate (kommentaar. Java: 67) by Android.App.Activity.Pormcreate (Activity.Java:4465) by Android.App.Instrumentation.CallactivityOncreate (Instrumentation.java:1049) op Android.App.ActivityThread.performlaunchactivity (ActivityThread.java:1931). .. 11 meer

Ek dink die betrokke een is nou:

Veroorsaak deur: java.lang.classcastException: android.os.parcelable [] kan nie na com.example.incentive.messagemodel.tokens [] op com.example.incentive.messagemodel.message.readfromparcel (Message.java:94) gegooi word nie.

Dus doen ek waarskynlik hierdie een verkeerd: tokens = in.readparcelable (tokens.class.getclassloader ();

Hier is my Tokens-klas:

import android.os.Parcel;
import android.os.Parcelable;

public class Tokens implements Parcelable {

    String type;
    String value;
    int start;
    int end;


    /** Parcelable related **/
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(type);
        dest.writeString(value);
        dest.writeInt(start);
        dest.writeInt(end);
    }

    private Tokens(Parcel in) {
        type = in.readString();
        value = in.readString();
        start = in.readInt();
        end = in.readInt();
    }

    public static final Parcelable.Creator<Tokens> CREATOR = new Parcelable.Creator<Tokens>() {

        public Tokens createFromParcel(Parcel in) {
            return new Tokens(in);
        }

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


    /** Getters and setters **/ 
}

Ek het die hele middag gesoek en ek kan nie sien hoe om dit behoorlik te doen nie. Weet iemand?

Was dit nuttig?

Oplossing

Gebruik WritTyPedArray en ReadTyPedArray om u skikking op die pakkie te lees en te skryf

Lees

tokens = in.createTypedArray(Tokens.CREATOR);

Skryf

in.writeTypedArray(tokens, flags);

Ander wenke

probeer hierdie...

vervang

 tokens = in.readParcelable(Tokens.class.getClassLoader();

met

 tokens = in.readParcelableArray(Tokens.class.getClassLoader());

U skryf Parcelable Array, maar lees dit as Parcelable

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top