Android进阶之路 - 存、取、读 本地 Json 文件
最近在开发中又开始加载一些本地的json数据源,回头看之前竟然没记录,赶紧记录一波 ~
- 如何准备一个合格的json文件?
- AndoridStudio中如何存放json文件?
- 如何读取本地Json文件数据源?
- Java 版本
- Kotlin 版本
如何准备一个合格的json文件?
- 准备一个txt格式的json串,
另存为(A)...
更改文件名后缀为json
、更改编码格式为 UTF-8
- 保存后你就获取到了一个合格的json文件了
题外话 - 此处可不看
因为我是加载本地的省市区数据(后台提供数据源),无聊的时候github看到个 address.json ,其实意义不大,就顺手记录一下
AndoridStudio中如何存放json文件?
- 新建一个
assets
文件夹,将我们生成的json文件放在其内
即可
- 为了直观一点,奉上一张目录结构图
如何读取本地Json文件数据源?
在我写的Demo示例中,我用到的解析方式是FastJson
,以前有写过一篇 Android进阶之路 - FastJson送给如我从前般的新手
我解析用到的Model类,有兴趣的可以看看,没兴趣跳过就好
- AddressResponse
package com.defense.myapplicationimport java.io.Serializable
import java.util.*data class AddressResponse(val child: List<Child>,val firstLetter: String,val level: Int,val name: String,val parentId: Int,val part: Int
) {data class Child(val child: List<ChildX>,val firstLetter: String,val id: Int,val level: Int,val name: String,val parentId: Int,val part: Int) {data class ChildX(val child: List<Any>,val firstLetter: String,val id: Int,val level: Int,val name: String,val parentId: Int,val part: Int)}
}
Java 版本
public void readJson() {try {//InputStreamReader 将字节输入流转换为字符流//注意:address.json 是因人而异的InputStreamReader isr = new InputStreamReader(getAssets().open("address.json"), "UTF-8");//包装字符流,将字符流放入缓存里BufferedReader br = new BufferedReader(isr);String line;//StringBuilder和StringBuffer功能类似,存储字符串StringBuilder builder = new StringBuilder();while ((line = br.readLine()) != null) {//append 被选元素的结尾(仍然在内部)插入指定内容,缓存的内容依次存放到builder中builder.append(line);}br.close();isr.close();//builder.toString() 返回表示此序列中数据的字符串 (就是json串,后面自行解析就行)//这里我用的是fastJson,具体解析方式自行决定就好,数据格式也自行决定就好List<AddressResponse> addressResponses = JSON.parseArray(builder.toString(), AddressResponse.class);for (int i = 0; i < addressResponses.size(); i++) {AddressResponse addressResponse = addressResponses.get(i);System.out.println("-----------------");System.out.println("name= " + addressResponse.getName());List<AddressResponse.Child> child = addressResponse.getChild();for (int j = 0; j < child.size(); j++) {System.out.println("city name= " + child.get(j).getName());}} } catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}
Kotlin 版本
- 因为项目中使用,所以稍微优化一下,先检查
assets
是否有对应的json文件
public static String readAssetsFile(Context context, String fileName) {try {InputStream is = context.getAssets().open(fileName);int fileLength = is.available();byte[] buffer = new byte[fileLength];int readLength = is.read(buffer);is.close();return new String(buffer, "utf-8");} catch (IOException e) {e.printStackTrace();}return "读取错误,请检查文件是否存在";}
获取json
文件后,直接解析
到我们需要的数据源
public static List<AddressResponse> getLocalAddress(String json) {List<AddressResponse> addressResponses = JSON.parseArray(json, AddressResponse.class);return addressResponses;}
调用方式
lateinit var localAddressList: ArrayList<AddressResponse>localAddressList = getLocalAddress(readAssetsFile(this,"address.json")) as ArrayList<AddressResponse>
有的人可能感觉麻烦,我直接简单封在一起吧
未亲测 - 不过感觉没啥问题
lateinit var localAddressList: ArrayList<AddressResponse>localAddressList = getLocalAddress(readAssetsFile(this,"address.json")) as ArrayList<AddressResponse>//判断文件+解析public static List<AddressResponse> readAssetsFile(Context context, String fileName) {try {InputStream is = context.getAssets().open(fileName);int fileLength = is.available();byte[] buffer = new byte[fileLength];int readLength = is.read(buffer);is.close();List<AddressResponse> addressResponses = JSON.parseArray(new String(buffer, "utf-8"), AddressResponse.class);return addressResponses;} catch (IOException e) {e.printStackTrace();}return "读取错误,请检查文件是否存在";}
Android进阶之路 - 存、取、读 本地 Json 文件相关推荐
- php读本地json文件内容,php读取本地json文件有哪些方法
这次给大家带来php读取本地json文件有哪些方法,php读取本地json文件的注意事项有哪些,下面就是实战案例,一起来看一下. 1.data.json文件{ "goods":[ ...
- Android入门第9天-Android读本地JSON文件并显示
Android在大都情况会取得后台Service返回的json数据来做前端展示.那么Android是如何处理json文件的呢?我们就一起跟着今天的教程一步步来实现吧. 目标 设本地有一个demo.js ...
- Android进阶之路 - 解决部分手机拍照之后图片被旋转的问题
这几天犯了一个错误,初期想着甩锅给后台的- 但还好及时发现了是自身的问题~ 关联文章 Android基础进阶 - 调用拍照.获取图片(基础) Android基础进阶 - 获取.调用相册内图片(基础) ...
- Android进阶之路 - 批量下载、缓存图片、视频
之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...
- Android进阶之路 - 批量下载、缓存图片
在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...
- Android进阶之路 - 软键盘中右下角的设置与监听
在项目中,多多少少会遇到修改软键盘右下角按钮的需求,虽然已经写过几次,但是还是觉得在这里专心做个笔记比较放心 ~ 我的那些软键盘Blog ~ Android进阶之路 - 常见软键盘操作行为 Andro ...
- android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson ...
- jquery ajax json文件,jQuery ajax读取本地json文件
jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...
- Jquery中使用JsonP加载本地json文件解决跨域问题
场景 jquery中直接请求本地json文件时会提示跨域问题. Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获 ...
最新文章
- Ubuntu下ssh免password登录安装
- 目标检测|SSD原理与实现
- Percy Liang、李飞飞等百余位学者联名发布:「基础模型」的机遇与挑战
- Virtualbox虚机无法启动因断电
- java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
- windows平台搭建Mongo数据库复制集(类似集群)(一)
- 学计算机随随便便上万,大学“最烧钱”专业排行榜,“家境一般”慎入,“土豪”请随意...
- 鸿蒙系统的平板电脑,亓纪的想法 篇三百六十三:骁龙870+鸿蒙2.0!首款鸿蒙系统平板曝光,支持第二代M-Pencil...
- Simbad的使用--检索、导入、保存
- 在linux系统如何获得窗口句柄,编写控制台程序,获得标准输入输出的窗口句柄...
- 百度云盘批量转存工具使用教程
- ssh遇到密钥更改问题
- 如何编制试算平衡表_试算平衡表的编制步骤是怎样的?
- GRPC: 如何优雅关闭进程(graceful shutdown)?
- 阿卜杜拉国王科技大学的计算机,阿卜杜拉国王科技大学(KAUST)探索奖学金项目...
- cl.3hh.win/index.php,windows 系统下 安装 gitblit 教程
- 台式计算机的cpu是指,台式电脑CPU是A10指的是什么?
- 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
- jarsigner签名APK完整步骤
- 用Raphael在网页中画圆环进度条
热门文章
- 华为RH2285 服务器配置笔记
- android百度上弄一个蓝圈,iOS 百度地图 定位后蓝色圆圈(精度圈)去除
- 框架--SpringWeb
- 创建组groupadd_如何在Linux中创建组– groupadd命令
- ipv6 介绍,格式定义
- Android流量主,微信小程序和公众号流量主广告收入分成比例整体调优
- JSON数据转换总结(VIP典藏版)
- 三星s4i9500+android4.2.2基带,三星i9500/Galaxy S4 刷基带教程指引
- 巴菲特看好苹果的未来,然而库克似乎不太乐观选择抛售股份
- 前端笔试题总结(一) - JS篇