2014-01-13 4 views
5

In meiner Android Anwendung verwende ich eine Datei zum Speichern von Lizenzdaten. Und ich verwende Serialize Objekte. Ich erstelle ein Gerät Objekt und lesen Sie die Dateidetails in das Objekt. Geräteklasse implementiert Serializable.Android NotSerializableException ausgelöst für ein Objekt

public class MyDevice implements Serializable {} 

Aber zu Beginn der Anwendung es und speichert in einem MyDevice Objekt deserialisieren. Mein deserializeObject Methode ist wie folgt.

public MyDevice deserializeObject() { 

    File SerialFile = new File(GeoTrackerPaths.FILE_PATH); 
    MyDevice AndDeviceIn = new MyDevice(); 

    if (SerialFile.exists()) { 
     try { 
      FileInputStream fileIn = new FileInputStream(GeoTrackerPaths.FILE_PATH); 
      ObjectInputStream objInput = new ObjectInputStream(fileIn); 
      AndDeviceIn = (MyDevice) objInput.readObject(); 
      objInput.close(); 
      fileIn.close(); 

     } catch (Exception e) { 

      Log.i("TAG", "Exception during deserialization:" + e.getMessage()); 
      e.printStackTrace(); 
      System.exit(0); 
     } 
    } 

    return AndDeviceIn; 
} 

Meine Serialisierungscode

public void serializeObject(Context context, String phoneModel, 
     String androidVersion, String executiveCode, String Key, 
     String modelID, String tempKey, int noLogin, String expireDate, String Status) { 

    try { 
     MyDevice AndDeviceOut = new MyDevice(context, phoneModel, 
       androidVersion, new Date(), executiveCode, Key, modelID, 
       tempKey, noLogin, expireDate, Status); 

     FileOutputStream fileOut = new FileOutputStream(
       GeoTrackerPaths.FILE_PATH); 
     ObjectOutputStream objOutput = new ObjectOutputStream(fileOut); 
     objOutput.writeObject(AndDeviceOut); 
     objOutput.flush(); 
     objOutput.close(); 
     fileOut.close(); 

    } catch (Exception e) { 
     Log.i("TAG", "Exception during serialization:" + e.getMessage()); 
     e.printStackTrace(); 
     System.exit(0); 
    } 
} 

Und ich bin es, wie unten anrufen.

DeviceActivator activate=new DeviceActivator(); 
activate.serializeObject(Activation.this, phoneModel, androidVersion, txtExe, exeKey, modeilID, tempKey, noLogin, expireDate, Activation_Status); 

Wenn ich die App ausführen, werden folgende Ausnahmen ausgelöst.

java.io.WriteAbortedException: Read an exception; 
java.io.NotSerializableException: com.geotracker.entity.MyDevice 

Wie kann ich das beheben?

+0

Nicht im Zusammenhang mit Ausnahme, aber warum erstellen Sie neue MyDevice-Objekt und dann den gleichen Verweis auf Objekt, das Sie aus der Datei lesen? –

+0

meinst du "MyDevice AndDeviceIn = new MyDevice();" ist es nicht. sollte ich nicht eine MyDevice-Instanz erstellen, um das Objekt zu speichern .......... –

+0

Nichts sieht falsch mit Ihrem Beispiel De-Serialisierung Code aus, könnte ein Problem mit Ihrem Code sein, der den Serialisierungsprozess durchführt. Kannst du diesen Teil auch posten? – Durandal

Antwort

4

Es sieht nicht wie das Android Context Objekt serialisierbar ist. Sie können dies lösen, indem Sie das Objekt Context als vorübergehend deklarieren, über das Sie hier in der JDK-Spezifikation lesen können: Link. Grundsätzlich Markieren eines Feldes als transiente bedeutet es nicht in Serialisierung

teilnehmen Also Ihr Feld wie folgt in MyDevice erklären:

private transient Context context;

und Sie sollten gut zu gehen!

Verwandte Themen