ajuda dados Json não carrega no celular
3 participantes
Página 1 de 1
ajuda dados Json não carrega no celular
pessoal meu codigo funciona perfeitamente no unity mas quando testo no celular não carrega os dados? este e meu codigo. onde devo modificar para funcionar no android?
esta e a forma que dou load e save
- Código:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using AssemblyCSharp;
public class TimesManager : MonoBehaviour
{
[HideInInspector] public static TimesManager Instance;
///Lista todos os times disponiveis
public TeamObject30[] TimesDisponiveis;
void Awake()
{
Instance = this;
//Aquele padrão de Singleton
//definindo os ids dos times, para que eu possa salvar e carregar isso direito
for (int i = 0; i < TimesDisponiveis.Length; i++)
{
TimesDisponiveis[i].id = i;
}
}
public void save(GlobalGameSettingsBR1 serie)
{
string path = String.Format("{0}/{1}.json", Application.persistentDataPath, serie.jsonFileName);
IntArrayData SerieData = new IntArrayData();
SerieData.Array = new int[serie.availableTeams.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
SerieData.Array[i] = serie.availableTeams[i].id;
}
string json = JsonUtility.ToJson(SerieData);
File.WriteAllText(path, json);
//////
}
//ate ai ta tudo certo agora o problema e no load veja
public void load(GlobalGameSettingsBR1 serie)
{
string path = String.Format("{0}/{1}.json", Path.Combine(Application.persistentDataPath, serie.jsonFileName));
//verifica se existe save
if (File.Exists(path)) //se existe eu vou dar um load
{
string json = File.ReadAllText(path);
IntArrayData SerieData = JsonUtility.FromJson<IntArrayData>(json);
serie.availableTeams = new TeamObject30[SerieData.Array.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
serie.availableTeams[i] = TimesDisponiveis[SerieData.Array[i]];
}
}
else //se não existir eu vou popular a Serie do jeito que eu quiser
{
serie.availableTeams = TimesDisponiveis;
}
}
}
esta e a forma que dou load e save
- Código:
using UnityEngine;
public class GlobalGameSettingsBR1 : MonoBehaviour
{
public static GlobalGameSettingsBR1 instance;
[SerializeField] public string jsonFileName;
[Space(10f)]
public TeamObject30[] availableTeams;
private void Awake()
{
instance = this;
}
public void Load()
{
TimesManager.Instance.load(this);
}
public void Save()
{
TimesManager.Instance.save(this);
print("salvo");
}
private void Update()
{
}
}
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Re: ajuda dados Json não carrega no celular
OU sera que tem que ser assim???
- Código:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using AssemblyCSharp;
using System.Runtime.Serialization.Formatters.Binary;
public class TimesManager : MonoBehaviour
{
[HideInInspector] public static TimesManager Instance;
///Lista todos os times disponiveis
public TeamObject30[] TimesDisponiveis;
void Awake()
{
Instance = this;
//Aquele padrão de Singleton
filePath = Application.persistentDataPath + "/times.json";
//definindo os ids dos times, para que eu possa salvar e carregar isso direito
for (int i = 0; i < TimesDisponiveis.Length; i++)
{
TimesDisponiveis[i].id = i;
}
}
public static string filePath;
public void save(GlobalGameSettingsBR1 serie)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath+ serie.jsonFileName,FileMode.Create);
// string path = String.Format("{0}/{1}.json", Application.persistentDataPath, serie.jsonFileName);
IntArrayData SerieData = new IntArrayData();
SerieData.Array = new int[serie.availableTeams.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
SerieData.Array[i] = serie.availableTeams[i].id;
}
string json = JsonUtility.ToJson(SerieData);
// File.WriteAllText(path, json);
bf.Serialize(file, SerieData);
file.Close();
//////
}
//ate ai ta tudo certo agora o problema e no load veja
public void load(GlobalGameSettingsBR1 serie)
{
// string path = String.Format("{0}/{1}.json", Application.persistentDataPath, serie.jsonFileName);
//verifica se existe save
if (File.Exists(Application.persistentDataPath + serie.jsonFileName)) //se existe eu vou dar um load
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + serie.jsonFileName, FileMode.Open);
// string json = File.ReadAllText(path);
IntArrayData SerieData = (IntArrayData)bf.Deserialize(file);
file.Close();
serie.availableTeams = new TeamObject30[SerieData.Array.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
serie.availableTeams[i] = TimesDisponiveis[SerieData.Array[i]];
}
}
else //se não existir eu vou popular a Serie do jeito que eu quiser
{
serie.availableTeams = TimesDisponiveis;
}
}
}
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Re: ajuda dados Json não carrega no celular
O problema é que no Android (no .apk) os arquivos são realocados para uma pasta chamada "Streaming Assets", então o correto seria vc referenciar essa pasta.
Veja numa parte retirada da documentação, como referenciar para cada SO:
Documentação ref:
Para esse problema, eu tenho um método que me retorna o path correto, de acordo com o SO:
E daí eu uso numa variável que faz referencia a streaming assets:
Vc precisa verificar se o path existe primeiro na persistent, se não, precisa verificar a existência na streaming assets:
Esse método de "SolvePath" é útil pra retirar alguma barra invertida (que ocorre muito no iOS):
Aí sim, vc consegue retornar o arquivo corretamente.
Lembre-se de agora colocar seus arquivos .json numa pasta chamada StreamingAssets.
Veja numa parte retirada da documentação, como referenciar para cada SO:
- Most platforms (Unity Editor, Windows, Linux players) use Application.dataPath + "/StreamingAssets"
- macOS player uses Application.dataPath + "/Resources/Data/StreamingAssets"
- iOS uses Application.dataPath + "/Raw"
- Android uses files inside a compressed APK/JAR file, "jar:file://" + Application.dataPath + "!/assets"
Documentação ref:
Para esse problema, eu tenho um método que me retorna o path correto, de acordo com o SO:
- Código:
public static string GetStreamingPath()
{
#if UNITY_EDITOR_OSX || UNITY_IOS
return "file://" + System.IO.Path.Combine(Application.streamingAssetsPath);
#else
return Application.streamingAssetsPath;
#endif
}
E daí eu uso numa variável que faz referencia a streaming assets:
- Código:
streamingPath = GetStreamingPath();
Vc precisa verificar se o path existe primeiro na persistent, se não, precisa verificar a existência na streaming assets:
- Código:
public static string ReturnPath(string asset)
{
string path = SolvePath(asset, persistentPath);
if (!File.Exists(path))
{
path = SolvePath(asset, streamingPath);
if (!File.Exists(path))
{
Debug.LogError("Unable to find File at "" + asset + "".");
return string.Empty;
}
}
return path;
}
Esse método de "SolvePath" é útil pra retirar alguma barra invertida (que ocorre muito no iOS):
- Código:
private static string SolvePath(string asset, string baseFolder)
{
string result = Path.Combine(baseFolder, asset);
result = result.Replace('\\', '/');
return result;
}
Aí sim, vc consegue retornar o arquivo corretamente.
Lembre-se de agora colocar seus arquivos .json numa pasta chamada StreamingAssets.
Re: ajuda dados Json não carrega no celular
eu refiz e ficou desta forma mas não deu certo no android apenas no computador esta funcionando corretamente.MayLeone escreveu:O problema é que no Android (no .apk) os arquivos são realocados para uma pasta chamada "Streaming Assets", então o correto seria vc referenciar essa pasta.
Veja numa parte retirada da documentação, como referenciar para cada SO:
- Most platforms (Unity Editor, Windows, Linux players) use Application.dataPath + "/StreamingAssets"
- macOS player uses Application.dataPath + "/Resources/Data/StreamingAssets"
- iOS uses Application.dataPath + "/Raw"
- Android uses files inside a compressed APK/JAR file, "jar:file://" + Application.dataPath + "!/assets"
Documentação ref:
Para esse problema, eu tenho um método que me retorna o path correto, de acordo com o SO:
- Código:
public static string GetStreamingPath()
{
#if UNITY_EDITOR_OSX || UNITY_IOS
return "file://" + System.IO.Path.Combine(Application.streamingAssetsPath);
#else
return Application.streamingAssetsPath;
#endif
}
E daí eu uso numa variável que faz referencia a streaming assets:
- Código:
streamingPath = GetStreamingPath();
Vc precisa verificar se o path existe primeiro na persistent, se não, precisa verificar a existência na streaming assets:
- Código:
public static string ReturnPath(string asset)
{
string path = SolvePath(asset, persistentPath);
if (!File.Exists(path))
{
path = SolvePath(asset, streamingPath);
if (!File.Exists(path))
{
Debug.LogError("Unable to find File at "" + asset + "".");
return string.Empty;
}
}
return path;
}
Esse método de "SolvePath" é útil pra retirar alguma barra invertida (que ocorre muito no iOS):
- Código:
private static string SolvePath(string asset, string baseFolder)
{
string result = Path.Combine(baseFolder, asset);
result = result.Replace('\\', '/');
return result;
}
Aí sim, vc consegue retornar o arquivo corretamente.
Lembre-se de agora colocar seus arquivos .json numa pasta chamada StreamingAssets.
no android se eu iniciar carrega normalmente ai se salvar e eu der load de novo não modifica apenas modifica se eu fechar o aplicativo e abrir novamente.
este e o meu codigo teria como voce modificar ele onde esta errado?
- Código:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using AssemblyCSharp;
using System.Runtime.Serialization.Formatters.Binary;
public class TimesManager : MonoBehaviour
{
[HideInInspector] public static TimesManager Instance;
///Lista todos os times disponiveis
public TeamObject30[] TimesDisponiveis;
void Awake()
{
Instance = this;
//Aquele padrão de Singleton
filePath = Application.persistentDataPath + "/times.json";
//definindo os ids dos times, para que eu possa salvar e carregar isso direito
for (int i = 0; i < TimesDisponiveis.Length; i++)
{
TimesDisponiveis[i].id = i;
}
}
public static string filePath;
public void save(GlobalGameSettingsBR1 serie)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath+ "/times.dat", FileMode.Create);
// string path = String.Format("{0}/{1}.json", Application.persistentDataPath, serie.jsonFileName);
IntArrayData SerieData = new IntArrayData();
SerieData.Array = new int[serie.availableTeams.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
SerieData.Array[i] = serie.availableTeams[i].id;
}
string json = JsonUtility.ToJson(SerieData);
// File.WriteAllText(path, json);
bf.Serialize(file, SerieData);
file.Close();
//////
}
//ate ai ta tudo certo agora o problema e no load veja
public void load(GlobalGameSettingsBR1 serie)
{
// string path = String.Format("{0}/{1}.json", Application.persistentDataPath, serie.jsonFileName);
//verifica se existe save
if (File.Exists(Application.persistentDataPath + "/times.dat")) //se existe eu vou dar um load
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/times.dat", FileMode.Open);
// string json = File.ReadAllText(path);
IntArrayData SerieData = (IntArrayData)bf.Deserialize(file);
file.Close();
serie.availableTeams = new TeamObject30[SerieData.Array.Length];
for (int i = 0; i < SerieData.Array.Length; i++)
{
serie.availableTeams[i] = TimesDisponiveis[SerieData.Array[i]];
}
}
else //se não existir eu vou popular a Serie do jeito que eu quiser
{
serie.availableTeams = TimesDisponiveis;
}
}
}
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Re: ajuda dados Json não carrega no celular
cara, eu uso o meu usando a instrução using, tudo serializado em binário e até hoje funciona muito bem
- Código:
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static class SaveData
{
public static void SaveMainData(MainGameManager game)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/Game.Save";
using (FileStream stream = new FileStream(path, FileMode.Create))
{
MainData mainData = new MainData(game);
formatter.Serialize(stream, mainData);
}
}
public static MainData LoadData()
{
BinaryFormatter formater = new BinaryFormatter();
string path = Application.persistentDataPath + "/Game.Save";
if (File.Exists(path))
{
using (FileStream stream = new FileStream(path, FileMode.Open))
{
MainData mainData = formater.Deserialize(stream) as MainData;
return mainData;
}
}
else
{
return null;
}
}
}
Fluttershy28- Avançado
- PONTOS : 2752
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: ajuda dados Json não carrega no celular
eu salvo e dou load assim
- Código:
public void SaveMainData(MainGameManager gameManager)
{
SaveData.SaveMainData(this);
}
public void LoadMainData()
{
MainData data = SaveData.LoadData();
if (data != null)
{
// do something
}
}
Fluttershy28- Avançado
- PONTOS : 2752
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: ajuda dados Json não carrega no celular
e por ultimo o código dos meus dados fica assim
- Código:
using System.Collections.Generic;
[System.Serializable]
public class MainData
{
public MainData(MainGameManager gameData)
{
// do something
}
}
Fluttershy28- Avançado
- PONTOS : 2752
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: ajuda dados Json não carrega no celular
muito obrigado vou tentar adaptar em meu codigo para ver.Fluttershy28 escreveu:e por ultimo o código dos meus dados fica assim
- Código:
using System.Collections.Generic;
[System.Serializable]
public class MainData
{
public MainData(MainGameManager gameData)
{
// do something
}
}
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Re: ajuda dados Json não carrega no celular
no jeito, espero feedback
Fluttershy28- Avançado
- PONTOS : 2752
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: ajuda dados Json não carrega no celular
deu certo mas o problema era outro eu estava chamando errado o load eu tive que chamar ele em varios outros script pois nos outros script precisavaFluttershy28 escreveu:no jeito, espero feedback
da mudança de texturas e ID tambem e elas não eram chamadas vou fazer os testes aqui para ver e depois faço um video para voce ver.
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Re: ajuda dados Json não carrega no celular
Deu tudo certo ja ate enviei a atualização para o Google Play se quiser conferir e me dar algumas dicas para melhorar ele desde ja agradeço não entendo muito de graficos e tendencias.Fluttershy28 escreveu:no jeito, espero feedback
claudiano2020- Avançado
- PONTOS : 1660
REPUTAÇÃO : 38
Idade : 37
Respeito as regras :
Tópicos semelhantes
» O JOGO SALVA, MAS NAO CARREGA DADOS DOS SCRIPTABLES
» Salvar e carregar dados json player pref
» Duvidas sobre Programação, Banco de Dados, PHP/XML em Unity, Json ou PlayerPrefs?
» Ajuda com scripts _Banco de Dados MySql
» Como faço para inserir oa dados de pontuação em um banco de dados
» Salvar e carregar dados json player pref
» Duvidas sobre Programação, Banco de Dados, PHP/XML em Unity, Json ou PlayerPrefs?
» Ajuda com scripts _Banco de Dados MySql
» Como faço para inserir oa dados de pontuação em um banco de dados
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos