网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 服务器教程 > Android开发中为什么很少使用JSON存储数据?
商业源码 服务器教程 2023-12-12 17:05:02

Android开发中为什么很少使用JSON存储数据?

Android开发中为什么很少使用JSON存储数据?,第1张

Android中数据的存储有五种方式不同的应用及需求,会使用不同的方式去存储数据。

1 使用SharedPreferences存储数据

2 文件存储数据

3 SQLite数据库存储数据

4 使用ContentProvider存储数据

5 网络存储数据

不同的业务逻辑,或者需求,用不同的实现方式,以下是这几中数据存储方式的说明用及法:

第一种: 使用SharedPreferences存储数据

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。

其存储位置在/data/data/< >/shared_prefs目录下。

第二种: 文件存储数据

关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。文件可用来存放大量数据,如文本、、音频等。

默认位置:/data/data/< >/files/。

第三种: SQLite数据库存储数据

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite。

数据库存储在 data/< 项目文件夹 >/databases/ 下。

第四种: 使用ContentProvider存储数据 ContentProvider其实也是通过数据库的方式来存储数据的,因此这里不再做详细介绍。

第五种 :网络存储数据 也就是说将数据保存在服务器,android上只需要通过httpclient发起一个请求,向服务器获取数据即可。

给你我的一个代码片段,自己去理解吧

解析代码:

/

解析json数据

@param context

源数据

/

private void parseJson(String json)

{

try

{

JSONArray json_1 = new JSONArray(json);

List<Course> list = new ArrayList<Course>();

for (int i = 0; i < json_1length(); i++)

{

JSONObject json_2 = json_1getJSONObject(i);

Systemoutprintln("第一层第" + (i + 1) + "条数据="

+ json_2getString("Name") + "ID:"

+ json_2getInt("ID") + "父级ID:"

+ json_2getInt("ParentID"));

parese(json_2);//TODO

JSONArray json_3 = json_2getJSONArray("Children");

if (json_3length() != 0)

{

for (int j2 = 0; j2 < json_3length(); j2++)

{

JSONObject json_4 = json_3getJSONObject(j2);

Systemoutprintln("第二层第" + (i + 1) + "条数据="

+ json_4getString("Name") + "ID:"

+ json_4getInt("ID") + "父级ID:"

+ json_4getInt("ParentID"));

JSONArray json_5 = json_4getJSONArray("Children");

if (json_5length() != 0)

{

for (int k = 0; k < json_5length(); k++)

{

JSONObject json_6 = json_5getJSONObject(k);

Systemoutprintln("第三层第" + k + "条数据"

+ json_6getString("Name") + "ID:"

+ json_6getInt("ID") + "父级ID:"

+ json_6getInt("ParentID"));

}

}

}

}

}

}

catch (JSONException e)

{

eprintStackTrace();

}

}

数据源:

public class Cosnt

{

public static final String SOURCE = "[{Name:语言知识与语言运用,ID:7332,Children:[{Name:字音,ID:7333,Children:[{Name:字音,ID:7334,Children:[],ParentID:7333}],ParentID:7332},{Name:字形,ID:7339,Children:[],ParentID:7332},{Name:词语,ID:7345,Children:[],ParentID:7332},{Name:句子,ID:7375,Children:[],ParentID:7332},{Name:标点符号,ID:7381,Children:[],ParentID:7332},{Name:修辞,ID:7387,Children:[],ParentID:7332},{Name:语言运用与语言表达,ID:7390,Children:[],ParentID:7332}],ParentID:0},"

+ "{Name:文化、文学常识和名篇名句,ID:7405,Children:[{Name:作家作品,ID:7406,Children:[],ParentID:7405},{Name:古代文化常识,ID:7428,Children:[],ParentID:7405},{Name:名篇名句,ID:7431,Children:[],ParentID:7405}],ParentID:0},"

+ "{Name:文言文,ID :7434,Children:[{Name:文言实词,ID:7435,Children:[],ParentID:7434},{Name:文言虚词,ID:7439,Children:[],ParentID:7434},{Name:文言句式,ID:7442,Children:[],ParentID:7434},{Name:文言文阅读,ID:7445,Children:[],ParentID:7434}],ParentID:0}]";

}

你想在android端拼接这样一个json串?我觉得没必要,你可以post发送这些消息,不用拼接json,不然到服务器端,你还要解析。json串一般是在服务器端拼接,在android端解析。当然,如果你执意要拼接,就只能用sting一点一点拼了。就是用加号将每一个拼接起来,特殊字符转义一下,最后在打印一下,看json格式是否正确!

我做了一个代码如下:

public class MainActivity extends Activity {

ListView listview;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

listview = (ListView) findViewById(Ridlistview);

String temp = "[{\"aa\":\"1\",\"bb\":\"2\"},{\"aa\":\"3\",\"bb\":\"4\"},{\"aa\":\"5\",\"bb\":\"6\"}]";

List<Map<String, Object>> data = getList(temp);

SimpleAdapter adapter = new SimpleAdapter(this, data, Rlayoutitem, new String[]{"aa","bb"}, new int[]{Ridaa,Ridbb});

listviewsetAdapter(adapter);

}

public Map<String, Object> getMap(String jsonString) {

JSONObject jsonObject;

try {

jsonObject = new JSONObject(jsonString);

@SuppressWarnings("unchecked")

Iterator<String> keyIter = jsonObjectkeys();

String key;

Object value;

Map<String, Object> valueMap = new HashMap<String, Object>();

while (keyIterhasNext()) {

key = (String) keyIternext();

value = jsonObjectget(key);

valueMapput(key, value);

}

return valueMap;

} catch (JSONException e) {

eprintStackTrace();

}

return null;

}

public List<Map<String, Object>> getList(String jsonString) {

List<Map<String, Object>> list = null;

try {

JSONArray jsonArray = new JSONArray(jsonString);

JSONObject jsonObject;

list = new ArrayList<Map<String, Object>>();

for (int i = 0; i < jsonArraylength(); i++) {

jsonObject = jsonArraygetJSONObject(i);

listadd(getMap(jsonObjecttoString()));

}

} catch (Exception e) {

eprintStackTrace();

}

return list;

}

}

item的布局文件

<xml version="10" encoding="utf-8">

<LinearLayout xmlns:android="http://schemasandroidcom/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" >

    <TextView

        android:id="@+id/aa"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="30sp" />

    <TextView

        android:id="@+id/bb"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginLeft="100dp"

        android:textColor="#f00"

        android:textSize="30sp" />

</LinearLayout>

    最后的界面效果:

    

是可以用JSON存储数据对象的,而且也是Google推荐的,可以取代以实现Serializable来存储对象的方法。下面是使用JSON存储数据的原因。

Android开发中,涉及到对象存储,通常的做法是直接实现`Serializable`。有关这个接口,它保证了实现该接口的类的对象能够被`ObjectOutput/InputStream`直接输入输出,即序列化。这很方便,但是也很不好。

提到‘序列化’,大多数人都想到`Serializable`,而实际上‘序列化’的只是指“将对象的状态信息转换为可以存储或传输的形式的过程”,Java的`Serializabe`是字节序列化的一种。

`Serialziable`的缺点之一是,实现了该接口的类将失去灵活性。这一点《Effective Java》第74条也指出了,实现了这个`Serializable`的类将会依赖这个类的内部演化,根源在于UID(Serial version UID)。如果你没有指定UID,那么每次这个类被序列化时都会根据这个类的当前状态生成一个UID。想象这么一种场景:这个类已经被导出了,比如发给其他公司或部门使用了,然后你又修改了这个类,那么当你再将这个类发布时,由于UID不同,其他公司或部门的程序员将可能得到一个“InvalidClassException”。

这种情况的根本原因是因为你不能控制序列化的实现,你控制不了UID的生成过程。这就需要一个自定义的序列化形式。在Android中,Google推荐JSON序列化。而且Android程序员也可以使用Gson等工具来进行序列化和反序列化。

和`Serializable`的字节序列化不同,JSON序列化是字符序列化。

此外,`Serializable`只适合存储对象。由于在传输时`Serializalbe`要做大量IO,Android提供了`Parcelable`。

最后,题主不应该把数据库和JSON,XML比较,如果要比,也只能把数据库和文件存储比。数据库适合存储数量大,关系复杂的数据,这样管理,查阅就很方便。与此相对文件存储适合数量小,关系简单的数据。

数据 序列化 文件 数据库 对象
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Android开发中为什么很少使用JSON存储数据?

商业源码 钻石

分享到:
上一篇
cs1.6怎么建服务器
下一篇
怎么老是出现与服务器断开连接?

相关推荐

云存储和传统硬盘存储有哪些优缺点

云存储和传统硬盘存储有哪些优缺点

我们公司买的服务器是独享主机,我登陆后提示我磁盘空间低,一看c盘一点空间也没有,我该怎么办?

我们公司买的服务器是独享主机,我登陆后提示我磁盘空间低,一看c盘一点空间也没有,我该怎么办?

鲨鱼搜索为什么不能用了

鲨鱼搜索为什么不能用了

为什么玩游戏总是显示“服务器连接失败”?

为什么玩游戏总是显示“服务器连接失败”?

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...