it-swarm.com.de

Parcelable stieß auf IOException, bei der serialisierbare Objekte getactivity () geschrieben wurden

also bekomme ich das in logcat:

Java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)

Ich weiß, dass dies bedeutet, dass meine Studentenklasse nicht serialisierbar ist, aber hier ist meine Studentenklasse:

import Java.io.Serializable;


public class Student implements Comparable<Student>,  Serializable{

    private static final long serialVersionUID = 1L;
    private String firstName, lastName;
    private DSLL<Grade> gradeList; 

    public Student() {
        firstName = "";
        lastName = "";
        gradeList = new DSLL<Grade>();
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public DSLL<Grade> getGradeList() {
        return gradeList;
    }

    public void setGradeList(DSLL<Grade> gradeList) {
        this.gradeList = gradeList;
    }

    public int compareTo(Student arg0) {
        return this.lastName.compareTo(arg0.getLastName());
    }

}

dies ist der Code, der die Methode getIntent () verwendet:

public void onItemClick(AdapterView<?> parent, View viewClicked, int pos,
                                long id) {

                            Student clickedStudent = studentList.get(pos);
                            int position = pos;
                            Intent intent = new Intent(getActivity().getApplicationContext(), ShowStudentActivity.class);
                            Log.e("CINTENT","CREATED!!!");
                            intent.putExtra("clickedStudent",clickedStudent);
                            intent.putExtra("newStudentList",newStudentList);
                            intent.putExtra("position",position);
                            Log.e("putExtra","Passed");
                            Log.e("Start activity","passed");
                            startActivity(intent);

                        } 

                    });

bitte hilf mir herauszufinden, was daran falsch ist.

hier ist das ganze LogCat:

04-17 16:12:28.890: E/AndroidRuntime(22815): FATAL EXCEPTION: main
04-17 16:12:28.890: E/AndroidRuntime(22815): Java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Parcel.writeSerializable(Parcel.Java:1181)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Parcel.writeValue(Parcel.Java:1135)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Parcel.writeMapInternal(Parcel.Java:493)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Bundle.writeToParcel(Bundle.Java:1612)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Parcel.writeBundle(Parcel.Java:507)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.content.Intent.writeToParcel(Intent.Java:6111)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.Java:1613)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.app.Instrumentation.execStartActivity(Instrumentation.Java:1422)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.app.Activity.startActivityForResult(Activity.Java:3191)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.Java:848)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.support.v4.app.Fragment.startActivity(Fragment.Java:878)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.example.student_lists.MainActivity$DummySectionFragment$2.onItemClick(MainActivity.Java:477)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.widget.AdapterView.performItemClick(AdapterView.Java:292)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.widget.AbsListView.performItemClick(AbsListView.Java:1058)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.widget.AbsListView$PerformClick.run(AbsListView.Java:2514)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.widget.AbsListView$1.run(AbsListView.Java:3168)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Handler.handleCallback(Handler.Java:605)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Handler.dispatchMessage(Handler.Java:92)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Looper.loop(Looper.Java:137)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.app.ActivityThread.main(ActivityThread.Java:4447)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.lang.reflect.Method.invokeNative(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.lang.reflect.Method.invoke(Method.Java:511)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:784)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:551)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at dalvik.system.NativeStart.main(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815): Caused by: Java.io.NotSerializableException: com.resources.student_list.DSLL$DNode
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.Java:1364)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.Java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.Java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.Java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.Java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.Java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.Java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.Java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.Java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.Java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.Java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.Java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at Android.os.Parcel.writeSerializable(Parcel.Java:1176)
125
user2896762
Caused by: Java.io.NotSerializableException: com.resources.student_list.DSLL$DNode

Ihre DSLL-Klasse scheint eine DNode-statische innere Klasse zu haben, und DNode ist nicht Serializable.

246
CommonsWare

Ihre OneThread-Klasse sollte auch Serializable implementieren. AlleUnterklassenundinnere Unterklassenmüssen implementieren Serializable .

das ist für mich gearbeitet ...

28
Pankaj Talaviya

Wenn Sie DNode nicht serialisierbar machen können, wäre es eine gute Lösung, der Variablen "Transient" hinzuzufügen.

Beispiel:

public static transient DNode dNode = null;

Dadurch wird die Variable bei Verwendung von Intent.putExtra (...) ignoriert.

22

wenn Ihr POJO ein anderes Modell enthält, das ebenfalls Serializable implementiert

2
saigopi

Das Problem tritt auf, wenn Ihre benutzerdefinierte Klasse eine andere Klasse für die Eigenschaft hat, z. "Bitmap". Was ich gemacht habe, ist das Eigenschaftsfeld von "privates Bitmap-Foto" in "privates vorübergehendes Bitmap-Foto" zu ändern. Das Bild ist jedoch leer, nachdem ich in der Empfängeraktivität getIntent () habe. Aus diesem Grund habe ich die benutzerdefinierte Klasse an die Absicht übergeben und auch ein Byte-Array aus dem Bild erstellt und separat an die Absicht übergeben:

selectedItem ist mein benutzerdefiniertes Objekt und getPlacePhoto ist seine Methode zum Abrufen von Bildern. Ich habe es schon eingestellt und jetzt bekomme ich es einfach als erstes, konvertiere es und lass es separat übergeben:

 Bitmap image = selectedItem.getPlacePhoto();
 image.compress(Bitmap.CompressFormat.PNG, 100, stream);
 byte[] byteArray = stream.toByteArray();
 Intent intent = new Intent(YourPresentActivity.this, 
 TheReceiverActivity.class);
 intent.putExtra("selectedItem", selectedItem);                 
 intent.putExtra("image", byteArray);
 startActivity(intent);            

`

Dann bekomme ich in der Empfängeraktivität mein Objekt und das Bild als Byte-Array, dekodiere das Bild und setze es als Fotoeigenschaft auf mein Objekt.

 Intent intent = getIntent();
 selectedItem = (ListItem) intent.getSerializableExtra("selectedItem");
 byte[] byteArray = getIntent().getByteArrayExtra("image");
 Bitmap image = BitmapFactory.decodeByteArray(byteArray, 0, 
 byteArray.length);
 selectedItem.setPhoto(image);
2
Pavel Aslanov

Für mich wurde dies gelöst, indem die Variable innerhalb der Klasse transient gemacht wurde. 

Code vor: 

public class UserLocation implements Serializable {
   public Location lastKnownLocation;
   public UserLocation() {}
}

code nach

public class UserLocation implements Serializable {
    public transient Location lastKnownLocation;
    public UserLocation() {}
}   
2
Gomez NL

Ich bin auch in der Phase dieser Fehler und ich bin eine kleine Änderung in modelClass, die serializable Schnittstelle implementiert sind wie:

Bei dieser Model-Klasse implementieren Sie auch die Parcelable-Schnittstelle mit writeToParcel () override-Methode 

Dann bekam gerade Fehler zu "create creator" soCREATORschreibt und erstellt auch mit modelclass einen Konstruktor mit Argumenten & ohne Argumente ..

       @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(id);
            dest.writeString(name);
        }

        protected ArtistTrackClass(Parcel in) {
            id = in.readString();
            name = in.readString();
        }

       public ArtistTrackClass() {

        }

    public static final Creator<ArtistTrackClass> CREATOR = new Creator<ArtistTrackClass>() {
        @Override
        public ArtistTrackClass createFromParcel(Parcel in) {
            return new ArtistTrackClass(in);
        }

        @Override
        public ArtistTrackClass[] newArray(int size) {
            return new ArtistTrackClass[size];
        }
    };

Hier, 

ArtistTrackClass -> ModelClass

Konstruktor mit Parcel-Argumenten "Lesen Sie unsere Attribute" und writeToParcel () ist "Schreiben Sie unsere Attribute".

0
Dhruv Raval

Ich hatte das gleiche Problem: Es gab einige innere Klassen mit dem Schlüsselwort static. Nachdem das statische Schlüsselwort entfernt wurde, funktionierte es, und auch die innere Klasse sollte sich in Serializable implementieren lassen

Problemszenario

class A implements Serializable{ 
  class static B{
  } 
}

Gelöst von

class A implements Serializable{ 
      class B implements Serializable{
      } 
    }
0
sunil KV

die Grade-Klasse muss auch Serializable implementieren

public class Grade implements Serializable {
.....your content....
}
0
yOshi

In meinem Fall musste ich MainActivity auch als Serializable implementieren. Ursache Ich musste einen Dienst von meinem MainActivity aus starten:

public class MainActivity extends AppCompatActivity implements Serializable {
    ...
    musicCover = new MusicCover(); // A Serializable Object
    ...
    sIntent = new Intent(MainActivity.this, MusicPlayerService.class);
    sIntent.setAction(MusicPlayerService.ACTION_INITIALIZE_COVER);
    sIntent.putExtra(MusicPlayerService.EXTRA_COVER, musicCover);
    startService(sIntent);
}
0
Mr Brigante

Die Ausnahme trat aufgrund der Tatsache auf, dass keine der inneren Klassen oder anderen Klassen, auf die verwiesen wird, serialisierbar implementiert ist. Machen Sie also alle Klassen, auf die verwiesen wird, für Implementierungen serialisierbar.

0

Müssen alle Arraylist zu Serializable WIF in Bean-Klasse ändern:

public static class PremiumListBean  implements Serializable {
    private List<AddOnValueBean> AddOnValue;

    public List<AddOnValueBean> getAddOnValue() {
        return AddOnValue;
     }

    public void setAddOnValue(List<AddOnValueBean> AddOnValue) {
        this.AddOnValue = AddOnValue;
    }


    public static class AddOnValueBean  implements Serializable{

        @SerializedName("Premium")
        private String Premium;

        public String getPremium() {
            return Premium;
        }

        public void setPremium(String Premium) {
            this.Premium = Premium;
        }
    }
 }
0
murugan mani