IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Unity Android端对JSON数据的读取和修改 -> 正文阅读

[移动开发]Unity Android端对JSON数据的读取和修改

1.路径读取的几种方式

这里简单总结一下我们在开发安卓端时,常用的路径读取的几种方式:

  • Resources.Load<T>()
    • Resources文件夹是特殊文件夹,打包出APK或者生成EXE文件后,就不会存在这个外部路径了,它是内部动态加载资源。它是只读的,不能动态的修改。打包使会被压缩加密。
  • Application.streamingAssetsPath
    • StreamingAsset文件夹的内容会原封不动的打入包中,在Android端下是只读的,但是在PC端是可以读写的,必须放在根目录下,否则不能被读取到。在安卓平台下该目录下的文件被压缩到一个单独的.jar文件,可通过WWW读取文件中的数据,安卓端不能用IO的方式读取数据,可以用WWW或者UnityWebRequest相关读取。
    • "jar:file://" + Application.dataPath + "!/assets/"(最后的/要注意不能漏去)
  • Application.persistentDataPath
    • 当应用程序发布到IOS或者Android端时,这个路径会指向一个公共路径(运行时被创建),当软件更新或者覆盖安装时,这里的数据不会被清除,这个路径是可读写的,值得注意的是在IOS上就是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard,并且在Android打包时,ProjectSetting页面有一个选项Write Access,可以设置它的路径是沙盒还是sdcard;利用可以读写的特性,在安卓平台下,往往会将一些StreamingAsset文件中的Json数据,在程序运行时将其复制到此文件夹下,在对数据进行读取或者修改,也并不是所有的情况都得复制到此文件下,也得视情况而定。(Tips:当需要复制到该文件夹下,先需要判断文件是否存在)

思路:因为StreamingAsste文件夹在安卓端时只读的,但是Application.persistentDataPath文件夹是可以读写的,我们可以将JSON数据创建一份保存在Application.persistentDataPath目录下,供我们的读取和修改。


2.代码示例 安卓端读取和修改JSON数据(基本JSON读取介绍

JSON数据

{
    "StudentData":[
        {
            "ID":"001",
            "Name":"小明",
            "Age":"12"
        },
        {
            "ID":"002",
            "Name":"小花",
            "Age":"13"
        }
    ]
}

从StreamingAsset文件夹复制到persistentDataPath文件夹中

 //从StreamingAsset文件夹复制到persistentDataPath文件夹中
    IEnumerator CopyStreamingAssetData(string fileName)
    {
        string fromPath = "";

        if (Application.platform == RuntimePlatform.Android)
            fromPath = "jar:file://" + Application.dataPath + "!/assets/" + fileName;
        else
            fromPath = Application.streamingAssetsPath + "/" + fileName;

        string toPath = "jar:file://" + Application.persistentDataPath + "/" + fileName;

        UnityWebRequest request = UnityWebRequest.Get(fromPath);
        yield return request.SendWebRequest();

        if (!File.Exists(Application.persistentDataPath + "/" + fileName))
        {
            FileStream fs = File.Create(Application.persistentDataPath + "/" + fileName);
            fs.Close();
        }

        File.WriteAllBytes(Application.persistentDataPath + "/" + fileName, request.downloadHandler.data);
    }

从persistentData文件夹中读取数据

    
    IEnumerator ReadJson_IE(string path)
    {
        UnityWebRequest request = UnityWebRequest.Get("jar:file://" + Application.persistentDataPath + "/" + path);
        yield return request.SendWebRequest();
        data = JsonUtility.FromJson<Data>(request.downloadHandler.text);
        txt.text = request.downloadHandler.text+"\n当前的数量为:"+data.StudentData.Count;
    }

对应的JSON解析类

[Serializable]
public class Data {

    public List<Student> StudentData;
}
[Serializable]
public class Student {

    public string ID;
    public string Name;
    public string Age;
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:17:50  更:2021-11-18 11:19:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:11:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码