CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] comment interpréter cette erreur ?

unotheshoe
unotheshoe
Niveau 10
03 mai 2018 à 11:09:50

Caused by: java.io.NotSerializableException: com.uno.training.midible.MidiConnection$4

Que veut dire le $4 ?

Merci pour votre aide!

Bunyan
Bunyan
Niveau 17
03 mai 2018 à 11:54:47

Les $X signifient une classe créée à la compilation, généralement pour une classe interne (anonyme ou non).
Ca peut aussi être de la simple optimisation de compilation.

Fourni la stacktrace complète si tu souhaites une réelle aide :)

unotheshoe
unotheshoe
Niveau 10
03 mai 2018 à 12:02:37

<code></code>> Le 03 mai 2018 à 11:54:47 Bunyan a écrit :

Les $X signifient une classe créée à la compilation, généralement pour une classe interne (anonyme ou non).
Ca peut aussi être de la simple optimisation de compilation.

Fourni la stacktrace complète si tu souhaites une réelle aide :)

ok merci pour les précisions

stacktrace

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.uno.training.midible, PID: 9648 java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.uno.training.midible.MidiConnection) at android.os.Parcel.writeSerializable(Parcel.java:1536) at android.os.Parcel.writeValue(Parcel.java:1484) at android.os.Parcel.writeArrayMapInternal(Parcel.java:733) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) at android.os.Bundle.writeToParcel(Bundle.java:1133) at android.os.Parcel.writeBundle(Parcel.java:773) at android.content.Intent.writeToParcel(Intent.java:9247) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3494) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1526) at android.app.Activity.startActivityForResult(Activity.java:4389) at android.app.Activity.startActivityForResult(Activity.java:4348) at android.app.Activity.startActivity(Activity.java:4672) at android.app.Activity.startActivity(Activity.java:4640) at com.yassin.stage.midible.MidiConnection$1.onClick(MidiConnection.java:267) at android.view.View.performClick(View.java:6213) at android.widget.TextView.performClick(TextView.java:11074) at android.view.View$PerformClick.run(View.java:23645) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Caused by: java.io.NotSerializableException: com.uno.training.midible.MidiConnection$4 at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) at android.os.Parcel.writeSerializable(Parcel.java:1531) at android.os.Parcel.writeValue(Parcel.java:1484)  at android.os.Parcel.writeArrayMapInternal(Parcel.java:733)  at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)  at android.os.Bundle.writeToParcel(Bundle.java:1133)  at android.os.Parcel.writeBundle(Parcel.java:773)  at android.content.Intent.writeToParcel(Intent.java:9247)  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3494)  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1526)  at android.app.Activity.startActivityForResult(Activity.java:4389)  at android.app.Activity.startActivityForResult(Activity.java:4348)  at android.app.Activity.startActivity(Activity.java:4672)  at android.app.Activity.startActivity(Activity.java:4640)  at com.uno.training.midible.MidiConnection$1.onClick(MidiConnection.java:267)  at android.view.View.performClick(View.java:6213)  at android.widget.TextView.performClick(TextView.java:11074)  at android.view.View$PerformClick.run(View.java:23645)  at android.os.Handler.handleCallback(Handler.java:751)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6692)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

Message édité le 03 mai 2018 à 12:03:40 par unotheshoe
Bunyan
Bunyan
Niveau 17
03 mai 2018 à 12:56:23

C'est plus parlant déjà ^^
On va commencer le jeu de piste, vu que tu ne donnes pas d'information :D

Stacktrace => donc de bonnes chances que ce soit du Java.
Parcelable => donc tu fais de l'Android et tu tentes de fournir des données d'une Activity à une autre.
NotSerializableException => tu passes par de la sérialisation simple et ta classe contient au moins un attribut qui n'est pas serializable. Déclares-la "transient" si c'est une donnée optionnelle, sinon rends-la Serializable.

Bonus : fouille les inspections de Android Studio est active le warning "Serializable class with non-serializable attribute" (quelque chose comme ça). Ca t'évitera d'office ce genre d'erreur.

Bonus bis : renseigne-toi sur le concept de "serialization" et plus précisément sur celui d'Android.

Bonus ter : tu as des outils qui permettent de rendre tes classes Parcelable, dont un plugin Android Studio.

unotheshoe
unotheshoe
Niveau 10
03 mai 2018 à 13:32:42

Désolé si je donne pas beaucoup d'informations, ce matin c'était un peu le rush et j'avais un tas de trucs à faire.
Effectivement, je suis sur Android et je compte faire passer cet objet en question (MidiConnection) de l'activité où je me trouve (MidiConnection) à une autre activité.
J'ai testé avec Parcelable et c'est un peu la merde, j'ai trouvé Serializable beaucoup plus simple à utiliser et même si c'est moins performant, ça ne dérange pas, ce n'est pas une grosse app que je suis en train de développer

je vais retenter le coup avec Parcelable, je créé une copie du projet pour le coup

Message édité le 03 mai 2018 à 13:33:17 par unotheshoe
unotheshoe
unotheshoe
Niveau 10
03 mai 2018 à 13:41:17

NotSerializableException => tu passes par de la sérialisation simple et ta classe contient au moins un attribut qui n'est pas serializable. Déclares-la "transient" si c'est une donnée optionnelle, sinon rends-la Serializable.

c'est ce que j'avais trouvé sur Stack Overflow, j'ai déclaré tous mes attributs transient et j'ai le même problème
j'ai également 3 classes imbriquées, toutes ont implémenté Serializable et ont leurs attributs transient

Bunyan
Bunyan
Niveau 17
03 mai 2018 à 13:43:59

3 classes imbriquées ?
Revois ton architecture ^^
Simplifie ou crée des fichiers pour ces classes, mais y'a de bonnes chances que ton problème vienne de là.
Pas la peine de passer par Parcelable, tu peux continuer Serializable (même si Parcelable est mieux sur Android). Mais simplifie ton archi et tes fichiers. Ton problème vient plus de là.

unotheshoe
unotheshoe
Niveau 10
03 mai 2018 à 13:52:53

Ce n'est pas moi qui ai conçu l'architecture
Je suis parti d'un projet open source : https://github.com/philburk/android-midisuite/blob/master/MidiBtlePairing/src/main/java/com/mobileer/example/midibtlepairing/MainActivity.java

Je m'amuse avec la technologie Midi, le MainAcitivty ci-dessus correspond à ma classe MidiConnection et une fois que le téléphone est connecté à un appareil, j'appuie sur un bouton "Jouer" et je passe à une autre activité

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment