Skip to content

Instantly share code, notes, and snippets.

@amowu
Created December 25, 2013 08:24
Show Gist options
  • Save amowu/8121334 to your computer and use it in GitHub Desktop.
Save amowu/8121334 to your computer and use it in GitHub Desktop.
Get Unity StreamingAssets file path with Android and iOS.
// Put your file to "YOUR_UNITY_PROJ/Assets/StreamingAssets"
// example: "YOUR_UNITY_PROJ/Assets/StreamingAssets/db.bytes"
string dbPath = "";
if (Application.platform == RuntimePlatform.Android)
{
// Android
string oriPath = System.IO.Path.Combine(Application.streamingAssetsPath, "db.bytes");
// Android only use WWW to read file
WWW reader = new WWW(oriPath);
while ( ! reader.isDone) {}
realPath = Application.persistentDataPath + "/db";
System.IO.File.WriteAllBytes(realPath, reader.bytes);
dbPath = realPath;
}
else
{
// iOS
dbPath = System.IO.Path.Combine(Application.streamingAssetsPath, "db.bytes");
}
@omavi
Copy link

omavi commented Mar 21, 2016

YOU ARE A GOD. Only place on the webz that I could find a solution to this problem, including searching on Unity's site. Thanks so much!

@madTeddy
Copy link

OOooO my gooood. TY for that script!

@sahsubodh
Copy link

this worked. thanks!

@AliAkbarMontazeri
Copy link

Looks like everyone found this code work. Great ! I tried it to retrieve the .json file using his code and it didn't work. Anyone know how to use that code for .json file ?

@dnorth
Copy link

dnorth commented Dec 29, 2016

This really is the only place to find a simple solution for this problem... can't believe it. But thanks!

@AliAkbarMontazeri I hope you've already found a solution for this, but just in case... I used this for my .json code in this way

        string filePath = Application.streamingAssetsPath + "/file.json";
        string jsonString;

        if(Application.platform == RuntimePlatform.Android) //Need to extract file from apk first
        {
            WWW reader = new WWW(filePath);
            while (!reader.isDone) { }

            jsonString= reader.text;
        }
        else
        {
            jsonString= File.ReadAllText(filePath);
        }
        
       Board deserializedJsonObject = JsonUtility.FromJson<Board>(jsonString);

@jasursadikov
Copy link

Is this the decompressing of file from StreamingAssets?

@onildoaguiar
Copy link

Thanks for share this code. @dnorth I used this same solution for my project. Thanks!

@rimagahwa
Copy link

Thank you for the code , finally found a snippet I could use .

Also @dnorth for the JSON file handling !

@doggan
Copy link

doggan commented Jun 8, 2017

If your file is too large (> 2MB in my case), waiting for www.isDone in a while loop will hang the app.

Unity explicitly discourages this in the docs: You should not write loops that spin until download is done; use coroutines instead., because depending on the platform, the www download may take place on the main thread, which will hang up your app.

@ginxx009
Copy link

Could someone help me please with this . I'm still not getting the .json data from android.

@AWiesbrock
Copy link

I also had trouble getting the json to read. what is in Boards class from @dnorth that we don't see?

@livein21st
Copy link

I have an XML file stored in the streamingAssets/XML/file.xml.

The code work for iOS but not in Android!!

Any Idea?

@ram1505
Copy link

ram1505 commented Jul 23, 2018

I'm extremely a newbie to Unity. I've a JSON file from the web. The JSON file contents loads well in Unity Desktop. However, when I build APK and load it from Phone, the JSON contents doesn't load. How can I get it to work?

Here is my code:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using SimpleJSON;

public class DataLoader : MonoBehaviour
{
    string JsonDataString;
    public string OriginalJsonSite;
    public Text Temp;
    public Text Humid;

    IEnumerator Start()
    {
        while (true)
        {
            WWW readingsite = new WWW(OriginalJsonSite);
            yield return readingsite;

            if (string.IsNullOrEmpty(readingsite.error))
            {
                JsonDataString = readingsite.text;
            }

            JSONNode jsonNode = SimpleJSON.JSON.Parse(JsonDataString);

            Temp.text = jsonNode["temp"].ToString().ToUpper();
            Debug.Log(jsonNode["temp"]);

            Humid.text = jsonNode["humid"].ToString().ToUpper();
            Debug.Log(jsonNode["humid"]);
            yield return new WaitForSeconds(2);
        }

    }
}

@DivyanshK86
Copy link

Thanks !

@nouratalla
Copy link

Thankkkkkkkkk you verrrryyyyyyy muccccchhhhhhhh ;DDDDDDDD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment