2012-03-17 3 views
0

Après avoir obtenu aucune réponse à ma dernière question, j'ai reformulé la chose à sa forme la plus simple. 1 bouton, 1 clicklistener, 1 objet sérialisable et 1 sous-programme pour sortir l'objet sérialisable. Ce code est basé sur environ 6-8 exemples que j'ai trouvés ici sur stackoverflow. Et pourtant, aussi simple que cela soit, il génère toujours cette erreur: W/System.err (228): java.io.NotSerializableException: serobj.testActivity Donc, je vous défie, oh si gurus de code sage: pourquoi ce code génère cette erreur ? Et le plus important, qu'est-ce que je fais pour le réparer? Le code entier suivi de journal ouput:Pourquoi cet objet sérialisable simple lance-t-il NotSerializableException?

package serobj; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import ser.obj.R; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 


public class testActivity extends Activity { 
/** Called when the activity is first created. */ 
public class Tester implements Serializable{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
public String frog; 
    public Tester(){ 
     frog="frog"; 
    } 

} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
Button button1 = (Button) findViewById(R.id.button1); 
button1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     Testit(); 
    } 
}); 
} 
public void Testit(){ 
     Tester test = new Tester(); 

    FileOutputStream fos; 
    try { 
     fos =openFileOutput("test.fyl", Context.MODE_WORLD_READABLE); 
     Log.d("file open","..."); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     Log.d("ObjOutStr","..."); 
     oos.writeObject(test); 
     Log.d("tried wO","..."); // never gets here... 
     oos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Log.d ("filenotfound", "filenotfound"); 
    }catch(IOException e){ 
     e.printStackTrace(); 
     Log.d("ioexception", "ioexception"); 
    } 

} 

}

03-17 04:40:02.691: D/file open(228): ... 
03-17 04:40:02.701: D/ObjOutStr(228): ... 
03-17 04:40:02.961: W/System.err(228): java.io.NotSerializableException: serobj.testActivity 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1547) 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854) 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696) 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660) 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153) 
03-17 04:40:02.971: W/System.err(228): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:420) 
03-17 04:40:02.981: W/System.err(228): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1251) 
03-17 04:40:02.981: W/System.err(228): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587) 
03-17 04:40:02.981: W/System.err(228): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854) 
03-17 04:40:02.981: W/System.err(228): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696) 
03-17 04:40:02.981: W/System.err(228): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660) 
03-17 04:40:02.981: W/System.err(228): at serobj.testActivity.Testit(testActivity.java:50) 
03-17 04:40:03.015: W/System.err(228): at serobj.testActivity$1.onClick(testActivity.java:37) 
03-17 04:40:03.015: W/System.err(228): at android.view.View.performClick(View.java:2364) 
03-17 04:40:03.015: W/System.err(228): at android.view.View.onTouchEvent(View.java:4179) 
03-17 04:40:03.015: W/System.err(228): at android.widget.TextView.onTouchEvent(TextView.java:6541) 
03-17 04:40:03.015: W/System.err(228): at android.view.View.dispatchTouchEvent(View.java:3709) 
03-17 04:40:03.015: W/System.err(228): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-17 04:40:03.021: W/System.err(228): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-17 04:40:03.021: W/System.err(228): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-17 04:40:03.021: W/System.err(228): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-17 04:40:03.021: W/System.err(228): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-17 04:40:03.021: W/System.err(228): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
03-17 04:40:03.021: W/System.err(228): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
03-17 04:40:03.021: W/System.err(228): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
03-17 04:40:03.021: W/System.err(228): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
03-17 04:40:03.021: W/System.err(228): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
03-17 04:40:03.021: W/System.err(228): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-17 04:40:03.031: W/System.err(228): at android.os.Looper.loop(Looper.java:123) 
03-17 04:40:03.031: W/System.err(228): at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-17 04:40:03.031: W/System.err(228): at java.lang.reflect.Method.invokeNative(Native Method) 
03-17 04:40:03.031: W/System.err(228): at java.lang.reflect.Method.invoke(Method.java:521) 
03-17 04:40:03.031: W/System.err(228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-17 04:40:03.031: W/System.err(228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-17 04:40:03.031: W/System.err(228): at dalvik.system.NativeStart.main(Native Method) 
03-17 04:40:03.031: D/ioexception(228): ioexception 
03-17 04:51:21.861: D/dalvikvm(56): threadid=15: bogus mon 1+0>0; adjusting 

Répondre

8

être la cause de votre classe interne n'est pas statique, donc d'exister comme une chose sérialisé, il aura besoin de l'instance de la classe outter et une activité n'est pas sérialisée. Faites de Tester une classe séparée ou faites-en une classe interne statique.

+0

Drôle à quelle fréquence c'est quelque chose de simple qui est juste négligé. Merci pour la réponse rapide, Snicolas, cela fonctionne parfaitement. –

+0

Je voulais juste partager, dans une de mes classes (qui implémentent Serializable) j'ai une interface interne (statique). J'avais la même exception NotSerializableException. En regardant tes ans j'ai fini par faire en sorte que ça se prolonge Serialisable et ça a résolu le problème. – user2720864

Questions connexes