Android App中读取XML与JSON格式数据的基本方法示例
作者:chenlijian 时间:2023-07-19 10:02:56
XML
假如有这样一个XML格式的数据:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<customer name="luopeng" age="21" gender="1" emial="dylankeepmoving@163.com"/>
<customer name="dylan" age="22" gender="2" emial="710097663@qq.com"/>
<customer name="android" age="6" gender="2" emial="android@gmail.com"/>
</resources>
下面我们来编写一个类来读取,此类的作用是点击按钮后在EditView上显示资源文件(一个XML)中的内容,此例中会使用到XMLResourceParser
public class TestXmlResourceParserActivity extends Activity {
private EditText et;
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 变量在内部类中使用的前提是此变量必须是final修饰的
myButton = (Button) this.findViewById(R.id.btn01);
et = (EditText) this.findViewById(R.id.edittext01);
myButton.setOnClickListener(new OnClickListener() {
StringBuilder sb = new StringBuilder("");
Resources res = getResources();
XmlResourceParser xrp = res.getXml(R.xml.test);
@Override
public void onClick(View v) {
int counter = 0;
try {
// 判断是否到了文件的结尾
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
//文件的内容的起始标签开始,注意这里的起始标签是test.xml文件里面<resources>标签下面的第一个标签
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String tagname = xrp.getName();
if (tagname.endsWith("customer")) {
counter++;
sb.append("这是第" + counter + "客户"+"\n");
sb.append("姓名:"+xrp.getAttributeValue(0)+"\n");
sb.append("年龄:"+xrp.getAttributeValue(1)+"\n");
sb.append("性别:"+xrp.getAttributeValue(2)+"\n");
sb.append("邮箱:"+xrp.getAttributeValue(3)+"\n\n");
}
}
xrp.next();
}
et.setText(sb.toString());
} catch (XmlPullParserException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
JSON
创建JSON数据
try {
//首先创建对象中的一个单个键值对
JSONObject root = new JSONObject();
root.put("cat", "it");
//另一个键值对的值是一个数组,数组里装了3个JSON对象,所以再分别搞3个JSONObject对象存放键值对
JSONObject lan1 = new JSONObject();
lan1.put("id", "1");
lan1.put("ide", "Eclipse");
lan1.put("name","Java");
JSONObject lan2 = new JSONObject();
lan2.put("id", "2");
lan2.put("ide", "XCode");
lan2.put("name","Swift");
JSONObject lan3 = new JSONObject();
lan3.put("id", "2");
lan3.put("ide", "Visual Studio");
lan3.put("name","C#");
//在将这3个对象存入一个数组
JSONArray array = new JSONArray();
array.put(lan1);
array.put(lan2);
array.put(lan3);
//再将数组作为键"languages"的值,构成一个对象
root.put("languages", array);
//本例中只将内容输出出来
System.out.println(root.toString());
} catch (JSONException e) {
e.printStackTrace();
}
读取JSON数据
assets/test.json
{
"languages":[
{"id":1,"ide":"Eclipse","name":"Java"},
{"id":2,"ide":"XCode","name":"Swift"},
{"id":3,"ide":"Visual Studio","name":"C#"},
],
"cat","it"
}
try {
InputStream is = getResources().getAssets().open("test.json");
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
//将文本中的数据,都读取到一个StringBuilder当中
String line;
StringBuilder builder = new StringBuilder();
while((line=br.readLine()) != null ){
builder.append(line);
}
br.close();
isr.close();
JSONObject root = new JSONObject(builder.toString());
//根据键,获得键对应的值,由于值是String类型,所以用getString
System.out.println("cat="+root.getString("cat"));
//根据键,获得键对应的数组,由于值是一个数组,所以用getJSONArray
JSONArray array = root.getJSONArray("languages");
//由于要遍历数组,所以创建一个for循环
for(int i=0; i < array. length(); i++){
//由于每一个数组当中的元素,也是一个新的JSON对象
JSONObject lan = array.getJSONObject(i);
System.out.println("-------------------");
System.out.println("id="+lan.getInt("id"));
System.out.println("ide="+lan.getString("name"));
System.out.println("name="+lan.getString("name"));
Log.i("tag","-------");
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
标签:Android,XML,JSON
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
JAVA中实现链式操作(方法链)的简单例子
2022-12-16 00:54:50
Java jar打包工具使用方法步骤解析
2023-07-01 12:26:47
Android自定义实现图片加文字功能
2022-08-03 22:05:49
![](https://img.aspxhome.com/file/2023/6/88726_0s.png)
SpringBoot集成EasyExcel的应用场景分析
2023-01-09 07:47:45
![](https://img.aspxhome.com/file/2023/6/78876_0s.png)
Spring Security内置过滤器的维护方法
2022-07-30 18:10:16
![](https://img.aspxhome.com/file/2023/5/61285_0s.jpg)
算法练习之从String.indexOf的模拟实现开始
2023-02-23 09:20:40
Java常用内置注解用法分析
2023-11-24 04:53:46
SpringBoot 2.x 整合Lombok的方法示例
2022-03-15 17:43:35
![](https://img.aspxhome.com/file/2023/2/88222_0s.jpg)
java9新特性Collection集合类的增强与优化方法示例
2023-01-29 05:16:57
![](https://img.aspxhome.com/file/2023/4/61534_0s.png)
Java和Dubbo的SPI机制原理解析
2023-01-29 05:21:45
![](https://img.aspxhome.com/file/2023/2/132092_0s.png)
Eclipse+Java+Swing实现学生成绩管理系统的实例代码
2022-12-14 15:35:04
![](https://img.aspxhome.com/file/2023/0/77170_0s.jpg)
MybatisPlus如何自定义TypeHandler映射JSON类型为List
2023-08-08 14:05:38
Java Comparable和Comparator对比详解
2022-08-13 01:28:08
C#实现聊天窗体以及抖动
2021-06-07 10:40:50
JAVA Integer类常用方法解析
2021-09-01 06:51:08
Android下拉刷新官方版
2021-11-25 06:52:51
![](https://img.aspxhome.com/file/2023/6/139556_0s.gif)
SpringBoot实现二维码扫码登录的原理及项目实践
2022-02-25 22:31:15
![](https://img.aspxhome.com/file/2023/5/77995_0s.png)
C# Winform自动更新程序实例详解
2021-12-06 05:52:57
使用Java反射模拟实现Spring的IoC容器的操作
2023-06-03 17:37:42
![](https://img.aspxhome.com/file/2023/1/78021_0s.png)
java图的深度优先遍历实现随机生成迷宫
2023-06-26 06:06:05
![](https://img.aspxhome.com/file/2023/2/62672_0s.jpg)