- Home /
binaryformatter android save and load not working
I've tested on the editor and it works fine.But on Android doesnt work. Here's the code.
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class SaveData
{
public static int playerMoney;
public static int playerBankMoney;
public static int playerHealth;
public static int playerHunger;
}
public class SaveLoadSystem
{
public static void Save()
{
BinaryFormatter bf = new BinaryFormatter();
string path = Path.Combine(Application.persistentDataPath, "player.bin");
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
{
bf.Serialize(fs, SaveData.playerMoney);
bf.Serialize(fs, SaveData.playerBankMoney);
bf.Serialize(fs, SaveData.playerHealth);
bf.Serialize(fs, SaveData.playerHunger);
fs.Close();
}
}
public static void Load()
{
if (!File.Exists("player.bin"))
return;
BinaryFormatter bf = new BinaryFormatter();
string path = Path.Combine(Application.persistentDataPath, "player.bin");
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
SaveData.playerMoney = (int)bf.Deserialize(fs);
SaveData.playerBankMoney = (int)bf.Deserialize(fs);
SaveData.playerHealth = (int)bf.Deserialize(fs);
SaveData.playerHunger = (int)bf.Deserialize(fs);
fs.Close();
}
}
}
Answer by baybarss · Apr 03, 2021 at 03:10 PM
I just change Path.Combine(Application.persistentDataPath, "player.bin");
to Application.persistentDataPath + "/player.bin";
and it works on great.
Answer by andrew-lukasik · Mar 29, 2021 at 10:14 PM
Remove
static
keywords fromSaveData
class' fields.Add
[System.Serializable]
attribute forSaveData
class.Both your serialization and deserialization code looks fishy.
Replace whatever this is:
SaveData.playerMoney = (int)bf.Deserialize(fs);
SaveData.playerBankMoney = (int)bf.Deserialize(fs);
SaveData.playerHealth = (int)bf.Deserialize(fs);
SaveData.playerHunger = (int)bf.Deserialize(fs);
with:
SaveData saveData = (SaveData) bf.Deserialize(fs);
Also:
bf.Serialize( fs , saveData );
Note: You don't need BinaryFormatter
to serialize a int
field.
var bytes = System.BitConverter.GetBytes( SaveData.playerMoney );
will do.
Answer by KoenigX3 · Mar 29, 2021 at 09:30 PM
Shouldn't you use File.Exists with the full path as the parameter?
string path = Path.Combine(Application.persistentDataPath, "player.bin");
if(!File.Exists(path))
return;
Your answer
Follow this Question
Related Questions
How to save list of Sprites? 1 Answer
Save Game format that is change proof and secure 0 Answers
how to save a few ints into a game file using binary formatter 1 Answer
i need to return multiple types of values from my save and load functions 1 Answer
SerializationException: End of Stream encountered before parsing was completed. 0 Answers