为什么我们在android中使用JSON?

为什么我们在android中使用JSON?,第1张

概述我正在研究JSON,我认识到我如何使用它以及它是如何工作的.但我不清楚,为什么我们在项目和程序中使用它.如果你们其中一个人为我描述原因,我会很高兴的……谢谢回答…解决方法:在这里,您将学习如何在Android中使用JSON从服务器获取信息,什么是JSON对象,JSONArray.在智能手机应用

我正在研究JSON,我认识到我如何使用它以及它是如何工作的.但我不清楚,为什么我们在项目和程序中使用它.
如果你们其中一个人为我描述原因,我会很高兴的……

谢谢回答 …

解决方法:

在这里,您将学习如何在Android中使用JsON从服务器获取信息,什么是JsON对象,JsONArray.在智能手机应用程序开发中查询某些信息,进行一些处理并以不同的形式呈现给用户是一项非常常见的任务.有两种不同的主要方式:

1.)只需下载整个网页并使用HTML或XML解析器尝试提取您想要的信息.

2.)一些网站有API允许查询而不是返回网页,返回XML,JsON或其他一些呈现数据的方式.

显然,选项2(如果可用)更有意义.您可以下载更小,更易于管理的文本,而不是下载大型网页(浪费数据),解析整个内容(浪费电池),然后尝试分析它(浪费时间经历不正确的HTML编写) XML,JsON或API提供的任何内容. (我将很快发布关于选项1的另一个教程).

您可能想知道为什么要在智能手机应用程序中使用JsON而不是XML.毕竟,多年来,XML一直是一个被大肆宣传的技术流行语.然而,有一个好的(和简单的)原因. XML(通常)更大. XML中的结束标记在JsON中不存在,因此为每个不需要的标记节省了几个字节. JsON通常可以使用较少的字符来表达相同的数据,从而使得每次有对网站的查询时都不必传输更多数据.这使得JsON成为快速有效的网站查询(适用于提供它的网站)的自然选择.

一个这样的网站是http://www.archive.org.在许多其他事情中,archive.org允许人们从音乐会上传录音供其他人免费下载.这太棒了.它们还有一个API,允许您查询其系统,该系统将返回XML,JsON或各种其他格式的结果.

我目前正在编写一个从手机浏览archive.org的应用程序来查找节目,然后下载或流式传输曲目.我将向您展示如何使用JsON和几行代码完成第一部分(查找节目).

首先,您需要JsON查询.我将查询archive.org中的“Lotus”,询问包含10个项目的JsON结果及其各自的日期,格式,标识符,媒体类型和标题.根据archive.org搜索API,我的查询应如下所示:

String archivequery = "http://www.archive.org/advancedsearch.PHP?q=Lotus&fl[]=date&fl[]=format&fl[]=IDentifIEr&fl[]=mediatype&fl[]=Title&sort[]=createdate+desc&sort[]=&sort[]=&rows=10&page=1&output=Json&callback=callback&save=yes";

现在我们有了查询,我们使用查询轻松打开http连接,获取输入的字节流并将其转换为JsON对象.另外请注意,我正在使用BufferedinputStream,因为它的read()调用可以一次获取多个字节并将它们放入内部缓冲区.一个常规的inputStream每次读取一个字节(),因此它必须更多地调整 *** 作系统并且速度更慢并且浪费更多的处理能力(这反过来会浪费电池寿命).

inputStream in = null;String queryResult = "";try { URL url = new URL(archivequery);httpURLConnection urlConn = (httpURLConnection) url.openConnection();httpURLConnection httpConn = (httpURLConnection) urlConn;httpConn.setAllowUserInteraction(false); httpConn.connect();in = httpConn.getinputStream();BufferedinputStream bis = new BufferedinputStream(in);ByteArrayBuffer baf = new ByteArrayBuffer(50);int read = 0; int bufSize = 512;byte[] buffer = new byte[bufSize];while(true){     read = bis.read(buffer);    if(read==-1){ break; }    baf.append(buffer, 0, read);}queryResult = new String(baf.toByteArray());} catch (MalformedURLException e) { // DEBUG Log.e("DEBUG: ", e.toString());} catch (IOException e) { // DEBUG Log.e("DEBUG: ", e.toString());}

此时,我们的JsON响应存储在String queryResult中.它看起来像这样:

callback({ "responseheader": {... *sniP* ... }, "response": { "numFound": 1496, "start": 0, "docs": [{ "mediatype": "audio", "Title": "The disco Biscuits At Starscape 2010", "IDentifIEr": "ThediscoBiscuitsAtStarscape2010", "format": ["Metadata", "Ogg Vorbis", "VBR MP3"] }, { "Title": "Lotus live at Bonnaroo Music & Arts Festival on 2010-06-10", "mediatype": "etree", "date": "2010-06-10T00:00:00Z", "IDentifIEr": "Lotus2010-06-10TheOtherStageBonnarooMusicArtsFestivalManchester", "format": ["Checksums", "Flac", "Flac FingerPrint", "Metadata", "Ogg Vorbis", "Text", "VBR MP3"] }, { "Title": "Lotus live at Mr. Smalls Theatre on 2006-02-17", "mediatype": "etree", "date": "2006-02-17T00:00:00Z", "IDentifIEr": "lotus2006-02-17.matrix", "format": ["64Kbps M3U", "64Kbps MP3", "64Kbps MP3 ZIP", "Checksums", "Flac", "Flac FingerPrint", "Metadata", "Ogg Vorbis", "Text", "VBR M3U", "VBR MP3", "VBR ZIP"] }, {... *sniP* ...

我们看到我们想要的信息存储在一个数组中,其关键字是“docs”,并包含在一个名为“response”的项中.我们可以使用AndroID提供的JsONObject类轻松获取此信息,如下所示:

JsONObject jObject;try { jObject = new JsONObject(queryResult.replace("callback(", "")).getJsONObject("response"); JsONArray docsArray = jObject.getJsONArray("docs"); for (int i = 0; i < 10; i++) { if (docsArray.getJsONObject(i).optString("mediatype").equals("etree")) { String Title = docsArray.getJsONObject(i).optString("Title"); String IDentifIEr = docsArray.getJsONObject(i).optString("IDentifIEr"); String date = docsArray.getJsONObject(i).optString("date"); System.out.println(Title + " " + IDentifIEr + " " + date); } }} catch (JsONException e) { // DEBUG Log.e("DEBUG: ", JsONString); Log.e("DEBUG: ", e.toString());}

我要做的第一件事是从“queryResult”创建一个JsONObject,这是来自archive.org的JsON响应.请注意,我从JsON字符串中删除了“callback(”,因为即使archive.org返回它,它实际上也不应该是JsON字符串的一部分(我在捕获JsONException错误时意识到这一点).

之后,我们准备进行一些JsON解析.由于这只是一个教程,我将“10”硬编码到for循环中,因为我请求了10个项目.这在生产代码中是一个坏主意(如果你不知道为什么你是一个巨大的菜鸟,不应该编写生产代码).我只想要mediatype是“etree”的项目,并且对于每个项目,我打印标题,标识符和日期.

瞧,您现在知道如何在AndroID中使用JsON.

source

总结

以上是内存溢出为你收集整理的为什么我们在android中使用JSON?全部内容,希望文章能够帮你解决为什么我们在android中使用JSON?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存