热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓大json文件解析_Android里的网络以及XML,JSON文件的解析

涉及到Android里的网络编程都需要添加权限一、WebView:是应用程序打开web网页的UI控件前台:xmlns:toolshttp:schema

涉及到Android里的网络编程都需要添加权限

一、WebView:是应用程序打开web网页的UI控件

前台:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.webtest.WebViewActivity" >

android:id="@+id/webView"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

后端:public class WebViewActivity extends Activity {

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.webview);

webView=(WebView)findViewById(R.id.webView);

//getSettings():设置浏览器一些属性

//setJavascriptEnabled():设置WebView支持Javascript脚本

webView.getSettings().setJavascriptEnabled(true);

//setWebViewClient(new WebViewClient()):让从一个网页跳转到另一个网页时仍在当前WebView显示

webView.setWebViewClient(new WebViewClient());

//loadUrl(String):设置打开的网址

webView.loadUrl("http://www.baidu.com");

}

}

二、Http协议:客户端提交数据给服务端和从服务端获得数据,像WebView也是向百度的服务端发出一条Http请求,服务端返回HTML页面,客户端(浏览器)解析后展示出页面。

提交数据和获得数据的方式有很多,这里介绍一种,使用HttpURLConnection来向服务器提交数据或者获得数据。

获得数据://传入网址,获得请求网页数据(XML文件数据或JSON文件数据)

public static String sendHttpRequest(String address) {

HttpURLConnection connection=null;

try {

URL url=new URL(address);

connection=(HttpURLConnection)url.openConnection();

//设置请求方式:GET为从服务器获得数据,POST为提交数据

connection.setRequestMethod("GET");

//设置连接最长超时时间(单位毫秒)

connection.setConnectTimeout(8000);

//设置读取最长超时时间(单位毫秒)

connection.setReadTimeout(8000);

connection.setDoInput(true);

connection.setDoOutput(true);

//获取到的数据输入流(InputStream为抽象类)

InputStream in=connection.getInputStream();

//对输入流进行读取

BufferedReader reader=new BufferedReader(new InputStreamReader(in));

StringBuffer response = new StringBuffer();

String line;

while((line=reader.readLine()) != null) {

response.append(line);

}

return response.toString();

} catch (Exception e) {

e.printStackTrace();

return e.getMessage();

}finally {

if(connection!=null) {

connection.disconnect();

}

}

}

提交数据:public static void submit(String address) {

HttpURLConnection connection=null;

try {

//设置为提交模式

connection.setRequestMethod("POST");

DataOutputStream out=new DataOutputStream(connection.getOutputStream());

out.writeBytes("username=admin&password=123456");//数据与数据之间用&分割

}catch (Exception e) {

e.printStackTrace();

}finally {

if(connection!=null) {

connection.disconnect();

}

}

}

三、解析获得的网页数据(XML文件或JSON文件)

1、解析XML:使用Pull方式。需要导入jar包:xmlpull-xpp3-1.1.4c.jar

//Pull解析XML文件

private void parseXMLWithPull(String xml_data) {

try {

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser xmlPullParser = factory.newPullParser();

xmlPullParser.setInput(new StringReader(xml_data));

int eventType=xmlPullParser.getEventType();

String id = "";

String name = "";

String version = "";

while (XmlPullParser.END_DOCUMENT != eventType) {

String nodeName = xmlPullParser.getName();

switch (eventType) {

//解析时的判断逻辑

case XmlPullParser.START_TAG:

if ("id".equals(nodeName)) {

id = xmlPullParser.nextText();

} else if ("name".equals(nodeName)) {

name = xmlPullParser.nextText();

} else if ("version".equals(nodeName)) {

version = xmlPullParser.nextText();

}

break;

//完成解析某个结点

case XmlPullParser.END_TAG:

if ("app".equals(nodeName)) {

Log.d("id is ",id);

Log.d(" name is ",name);

Log.d(" version is ",version);

}

break;

default:

break;

}

eventType = xmlPullParser.next();

}

} catch (Exception e) {

e.printStackTrace();

}

}

2、解析JSON有俩种方式:JSONObject和GSON

JSONObject://JSONObject解析JSON文件

private void parseJSONWithJSONObject(String json_data) {

try {

JSONArray jsonArray=new JSONArray(json_data);

for(int i=0;i

JSONObject jsonObject=jsonArray.getJSONObject(i);

String id=jsonObject.getString("id");

String name=jsonObject.getString("name");

String version=jsonObject.getString("version");

Log.d("MainActivity", "id is"+id);

Log.d("MainActivity", "name is"+name);

Log.d("MainActivity", "version is"+version);

}

}catch(Exception e) {

e.printStackTrace();

}

}

GSON :需要导入jar包:gson-2.0.jar,log4j-1.2.17.jar,slf4j-api-1.7.10.jar,slf4j-log4j12-1.7.10.jar

还需要自定义与JSON文件相对应的对象class App{

private String id;

private String name;

private String version;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getVersion() {

return version;

}

public void setVersion(String version) {

this.version = version;

}

}

最后对传入JSON数据(String形式)进行解析//GSON解析JSON文件方法

private void parseJSONWithGSON(String json_data) {

Gson gson=new Gson();

List appList=gson.fromJson(json_data, new TypeToken>() {}.getType());

for(App app:appList) {

Log.d("MainActivity", "id is"+app.getId());

Log.d("MainActivity", "name is"+app.getName());

Log.d("MainActivity", "version is"+app.getVersion());

}

}



推荐阅读
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文详细介绍了如何在Android应用中处理和使用Cookie,包括登录时获取Cookie并将其存储,以及在WebView中同步这些Cookie以保持用户会话。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 作为一名在大型手机游戏公司工作的程序员,尽管主要负责游戏逻辑和内容的开发,但对iOS底层开发接触较少。现在有了iPhone和可以虚拟MAC环境的电脑,希望能找到有效的iOS开发学习路径。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 优化 Android 按钮状态下的背景和文本颜色变化
    本文介绍如何通过 Android 的 Selector 实现按钮在不同状态下(如按压)的背景和文本颜色动态变化。我们将详细讲解实现步骤,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍超文本标记语言(HTML)的基本概念与语法结构。HTML是构建网页的核心语言,通过标记标签描述页面内容,帮助开发者创建结构化、语义化的Web页面。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 在开发一款应用程序时,我需要向用户提供一系列URL列表。为了提高用户体验,计划根据Wi-Fi状态预先加载这些URL,以便用户在点击时能够迅速访问内容,特别是在连接到Wi-Fi的情况下。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
熊字饼爱优乐美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有