android数据存储的四种方案(三)
来源:互联网 发布:海康提示网络不可达 编辑:程序博客网 时间:2024/05/10 13:56
读写Json格式的数据
json格式的数据我们经常用于网络与客户端之间的数据交流,json相对于传统的xml,更加简洁,所以应用也越来越广泛,也常被用于本地存储
Android SDK用于读写JSON格式的数据的主要的两个类:JsonWriter和JsonReader,可以处理json对象和json数组,处理json对象的代码必须放在beginObject方法和endObject方法中,处理json数组的代码必须放在beginArray方法和endArray方法中,看下面代码:
public class TextActivitiy extends Activity{ private String jsonfile = "/sdcard/text.json"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_json); } private class Product{ public String name; public String sex; public Product(String name,String sex){ this.name = name; this.sex = sex; } } /** * 将Json对象写入文件 * @param writer * @param product * @throws IOException */ public void writeProduct(JsonWriter writer,Product product) throws IOException{ writer.beginObject(); writer.name("name").value(product.name); writer.name("sex").value(product.sex); writer.endObject(); } /** * 将Json数组写入文件 * @param writer * @param products * @throws IOException */ public void writeProductArray(JsonWriter writer,List<Product> products) throws IOException{ writer.beginArray(); for(Product product : products){ writeProduct(writer, product); } writer.endArray(); } /** * 将数组写入OutputStream中 * @param os * @param products * @throws IOException */ public void writeArrayStream(OutputStream os,List<Product> products) throws IOException{ JsonWriter writer = new JsonWriter(new OutputStreamWriter(os)); writer.setIndent(" "); writeProductArray(writer, products); writer.close(); } public void onClick_WriteJSON(View view){ try { //打开要写入的文件 FileOutputStream fos = new FileOutputStream(jsonfile); List<Product> products = new ArrayList<Product>(); products.add(new Product("姚化吉", "男")); products.add(new Product("刘欣煜", "男")); writeArrayStream(fos, products); Toast.makeText(getApplicationContext(), "数据写入成功", 1).show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 读取Json对象 * @param reader * @return * @throws IOException */ public Product readProduct(JsonReader reader) throws IOException{ String name = null; String sex = null; reader.beginObject(); while(reader.hasNext()){ String role = reader.nextName(); if(role.equals("name")){ name = reader.nextString(); }else if(role.equals("sex")){ sex = reader.nextString(); }else{ reader.skipValue(); } } reader.endObject(); return new Product(name, sex); } /** * 读取Json数组 * @param reader * @return * @throws IOException */ public List<Product> readProductArray(JsonReader reader) throws IOException{ List<Product> products = new ArrayList<Product>(); reader.beginArray(); while(reader.hasNext()){ products.add(readProduct(reader)); } reader.endArray(); return products; } /** * 从文件中读取json数组并转化为List<Product> 对象 * @param in * @return * @throws Exception */ public List<Product> readArrayStream(InputStream in) throws Exception{ JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); try{ return readProductArray(reader); }finally{ reader.close(); } } public void onClick_ReadJSON(View view){ String result = ""; try { //指定读取json数据的文件路径 FileInputStream fis = new FileInputStream(jsonfile); List<Product> products = readArrayStream(fis); if(products != null){ for(Product product : products){ result += "name:" + product.name + "sex:" + product.sex + "\n"; } Toast.makeText(getApplicationContext(), result, 2).show(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
这段代码主要是将List数组保存到JSON格式的文件中,再将该文件中的内容读取出来并还原成list数组
1 0
- android数据存储的四种方案(三)
- android数据存储的四种方案(二)
- android数据存储的四种方案(一)
- Android的数据存储---可供选择的存储方案(三)
- Android数据的四种存储方式(三) —— SharePreferences
- iOS数据存储的四种方案对比
- iOS数据存储的四种方案对比
- iOS数据存储的四种方案对比
- iOS数据存储的四种方案对比
- iOS数据存储的四种方案对比
- Android的数据存储方案
- 【Android】数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- POJ 1698 Alice's Chance(最大流)
- zoj3471 Most Powerful(状态压缩dp)
- 面试笔试杂项积累-leetcode 151-155
- javascript计算器工作原理
- could not open parameter file '/u01/app/oracle/product/11.1.0/db_1/dbs/initorc11g.ora
- android数据存储的四种方案(三)
- 面试笔试杂项积累-leetcode 156-160
- POJ 1182_食物链
- 面试笔试杂项积累-leetcode 161-165
- 深夜学算法之SkipList:让链表飞
- POJ 2240_Arbitrage
- utf8解决JSP中文乱码问题
- linux习惯每天一个命令之mount命令
- Hibernate细节