2016-03-09 3 views
0

У меня есть этот класс, чтобы читать/писать сериализуемые объекты:Невозможно прочитать сериализуемые объекты в Android

public class SerializableManager { 

/** 
* Saves a serializable object. 
* 
* @param context The application context. 
* @param objectToSave The object to save. 
* @param fileName The name of the file. 
* @param <T> The type of the object. 
*/ 

public static <T extends Serializable> void saveSerializable(Context context, T objectToSave, String fileName) { 
    try { 
     FileOutputStream fileOutputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE); 
     ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 

     objectOutputStream.writeObject(objectToSave); 

     objectOutputStream.close(); 
     fileOutputStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* Loads a serializable object. 
* 
* @param context The application context. 
* @param fileName The filename. 
* @param <T> The object type. 
* 
* @return the serializable object. 
*/ 

public static<T extends Serializable> T readSerializable(Context context, String fileName) { 
    T objectToReturn = null; 

    try { 
     FileInputStream fileInputStream = context.openFileInput(fileName); 
     ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
     objectToReturn = (T) objectInputStream.readObject(); 

     objectInputStream.close(); 
     fileInputStream.close(); 
    } catch (IOException | ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    return objectToReturn; 
} 

/** 
* Removes a specified file. 
* 
* @param context The application context. 
* @param filename The name of the file. 
*/ 

public static void removeSerializable(Context context, String filename) { 
    context.deleteFile(filename); 
} 

}

Проблема заключается в том, что, когда я пытаюсь прочитать объект myUserData из файла, он всегда равен нулю, несмотря на все мои попытки записать его в файл. Код, используемый для записи:

SerializableManager.saveSerializable(this, myUserData, UserData.FILENAME); 

кода, используемого для чтения:

UserData myUserData = SerializableManager.readSerializable(this, UserData.FILENAME); 

Имя файла:

public static final String FILENAME = "OLA"; 

Уже tryied для доступа места, где создается файл, но я не могу найти его , Расположение: /data/user/0/com.example.user.cycle_to_shop_v1/files

Честно говоря, я пытаюсь все, но ничего не работает до сих пор. Thx за помощь, Rui Santos

+0

Проверьте, все ли области класс, который вы пытаетесь сериализовать, на самом деле сериализуемы. – nekavally

ответ

0

Ну, это класс, который я хочу сериализации:

общественного класса UserData реализует Serializable {

// Stores all data related to the user 
private static final long serialVersionUID = -29238982928391L; 

// Stores all user data in this file 
public static final String FILENAME = "OLA"; 

// Singleton 
private static UserData instance = null; 

// Number of initial auto logins, which means, number of times the user can access the app without authentication 
private static final int NUMBER_OF_AUTO_LOGINS = 2; 

private String userName; 
private String userEmail; 
private Uri userPhotoUrl; 
private int userAutoLogins; 
private String userId; 


protected UserData(){} 

public static UserData getUserDataInstance(){ 
    if(instance == null) 
     instance = new UserData(); 

    return instance; 
} 

public String getUsername() { 
    return userName; 
} 

public String getUserEmail() { 
    return userEmail; 
} 

public Uri getUserPhotoUrl() { 
    return userPhotoUrl; 
} 

public int getUserAutoLogins() { 
    return userAutoLogins; 
} 

public String getUserId(){ 
    return userId; 
} 

public void setUsername(String newUsername) { 
    userName = newUsername; 
} 

public void setUserEmail(String newUserEmail) { 
    userEmail = newUserEmail; 
} 

public void setUserPhotoUrl(Uri newUserPhotoUrl) { 
    userPhotoUrl = newUserPhotoUrl; 
} 

public void setUserAutoLogins(int newUserAutoLogins) { 
    userAutoLogins = newUserAutoLogins; 
} 

public void setUserId(String newUserId){ 
    userId = newUserId; 
} 

}

Смежные вопросы