alors je reçois ceci dans logcat:
Java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
Je sais que cela signifie que ma classe d'étudiants n'est pas sérialisable, mais voici ma classe d'étudiants:
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());
}
}
et voici le code qui utilise la méthode getIntent ():
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);
}
});
aidez-moi s'il vous plaît à comprendre ce qui ne va pas avec cela.
voici l'intégralité de 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)
Caused by: Java.io.NotSerializableException: com.resources.student_list.DSLL$DNode
Votre classe DSLL
semble avoir une classe intérieure DNode
statique, et DNode
n'est pas Serializable
.
Votre classe OneThread doit également implémenter Serializable. Toutes lessous-classesetsous-classes internesmust implémentent Serializable .
cela a fonctionné pour moi ...
Si vous ne pouvez pas rendre DNode sérialisable, une bonne solution serait d’ajouter "transitoire" à la variable.
Exemple:
public static transient DNode dNode = null;
Cela ignorera la variable lorsque vous utilisez Intent.putExtra (...).
si votre POJO contient tout autre modèle à l'intérieur qui devrait également implémenter
Le problème se produit lorsque votre classe personnalisée a pour propriété une autre classe, par exemple. "Bitmap". Ce que j’ai fait est de changer le champ de propriété de "photo bitmap privée" en "photo bitmap privée transitoire". Cependant, l'image est vide après que je reçois GetIntent () dans l'activité du récepteur. Pour cette raison, j'ai passé la classe personnalisée à l'intention et j'ai également créé un tableau d'octets à partir de l'image et le transmettons séparément à l'intention:
selectedItem est mon objet personnalisé et getPlacePhoto est sa méthode pour obtenir une image. Je l'ai déjà défini auparavant et maintenant je l'obtiens avant de le convertir et de le transmettre séparément:
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);
`
Ensuite, dans l'activité de réception, je récupère mon objet et l'image sous forme de tableau d'octets, décode l'image et la définit sur mon objet en tant que propriété photo.
Intent intent = getIntent();
selectedItem = (ListItem) intent.getSerializableExtra("selectedItem");
byte[] byteArray = getIntent().getByteArrayExtra("image");
Bitmap image = BitmapFactory.decodeByteArray(byteArray, 0,
byteArray.length);
selectedItem.setPhoto(image);
Pour moi, cela a été résolu en rendant la variable de la classe transitoire.
Code avant:
public class UserLocation implements Serializable {
public Location lastKnownLocation;
public UserLocation() {}
}
code après
public class UserLocation implements Serializable {
public transient Location lastKnownLocation;
public UserLocation() {}
}
Je suis également en phase ces erreurs et je suis peu changement dans modelClass qui sont implémentés Interface sérialisable like:
Dans cette classe de modèle, implémentez également la méthode Parcelable interface with writeToParcel () override
Puis vient de recevoir une erreur pour "créer créateur" ainsiCR&EACUTE;ATEURest écrit et crée également avec le constructeur modelclass avec des arguments et sans arguments ..
@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];
}
};
Ici,
ArtistTrackClass -> ModelClass
Constructeur avec les arguments Parcel "lire nos attributs" et writeToParcel () est "écrire nos attributs"
J'ai rencontré le même problème, il y avait des classes internes avec le mot-clé static.Après avoir supprimé le mot-clé static, il a commencé à fonctionner et la classe interne devait également être implémentée dans Serializable.
class A implements Serializable{
class static B{
}
}
class A implements Serializable{
class B implements Serializable{
}
}
la classe Grade doit également implémenter Serializable
public class Grade implements Serializable {
.....your content....
}
Dans mon cas, je devais aussi implémenter MainActivity
comme Serializable
. Parce que je devais démarrer un service à partir de mon MainActivity
:
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);
}
L'exception est due au fait qu'aucune des classes internes ou autres classes référencées n'implémente sérialisable. Donc, rendre toutes les classes référencées à implémenter sérialisables.
Nécessité de changer tous les noms de publications en numéros de série en haricots:
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;
}
}
}