- Home /
Serialization not working on Android
Hello Internet, I have a problem. Right now, I have an android game that's heavily using Serialization cause it's a sandbox game, I want it to have a world selection system that selects a specific world and load's it, Just like Terraria or Minecraft. But the problem is that when I run my game on my android device(Not the Unity Editor), it wasn't saving or loading. I found questions and answers that were too complicated to use but if anyone has an answer, please I need it. Thank You.
For the code, This is a class for saving block ID's with Types and float[] for positions: public static class BlockSerialization { private static string path;
public static void SaveBlocks(List<BlockID> blockList, int worldSeed)
{
BinaryFormatter formatter = new BinaryFormatter();
path = Directory.GetCurrentDirectory() + "/" + worldSeed + "World.WLD";
FileStream stream = new FileStream( path, FileMode.Create);
formatter.Serialize(stream, blockList);
stream.Close();
}
public static List<BlockID> LoadBlocks(int worldSeed)
{
path = Directory.GetCurrentDirectory() + "/" + worldSeed + "World.WLD";
if (BlockSaveExists(worldSeed))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
List<BlockID> items = formatter.Deserialize(stream) as List<BlockID>;
stream.Close();
return items;
}
else
{
Debug.LogWarning("Save File Not Found In " + path);
return null;
}
}
public static void DeleteBlocks(int worldSeed)
{
path = Directory.GetCurrentDirectory() + "/" + worldSeed + "World.WLD";
if (File.Exists(path))
{
File.Delete(path);
}
else
{
Debug.LogWarning("No "+ path +" File Exists");
}
}
public static bool BlockSaveExists(int worldSeed)
{
path = Directory.GetCurrentDirectory() + "/" + worldSeed + "World.WLD";
if (File.Exists(path))
{
return true;
}
else
{
return false;
}
}
}
Answer by Bunny83 · Oct 16, 2021 at 07:11 AM
You can not use CurrentDirectory. That is usually the path of the current application and in the case of android it's the path where your APK file is located. You can't write there as an app, only the OS is allowed to.
You have to use the persistentDataPath which is a dedicated folder provided by the OS just for your app. Also you should always use this property and not use a hardcoded path since the location of that folder may vary between different android versions and also depends on the settings or where the app is installed.
Your answer
Follow this Question
Related Questions
[Android] Save data loss with PlayerPrefs? 2 Answers
Material color does not save (Android) 1 Answer
PlayerPrefs base saving system (works in editor but not works on android) 0 Answers
Is it possible to make a Icy/Slippery floor with code with a fixed velocity? 1 Answer
Loop code for block stack slows to 3fps on android...why? 0 Answers