Android 操作JSON数组

首先介绍数据写入,写入到本地的是文本文件*.json,可以使用文本编辑器打开查看

1. 写入数据文件

/**
	 * 数据提交,把程序中缓存的信息持久化到本地文件
	 */
	@SuppressLint("NewApi")
	public static void commit(){
		JsonWriter writer = null;
		try {
			writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(localfile.getPath() + "/history.json"), "UTF-8"));
			writer.beginArray();
			
			for (User user : users) {
				
				writer.beginObject();
				
				writer.name(PreferencesManager.USER_NAME).value(user.getName());
				writer.name(PreferencesManager.USER_PHONE).value(user.getPhone());
				writer.name(PreferencesManager.USER_STATE).value(user.getState());
				writer.name(PreferencesManager.USER_IM).value(user.getIm());
				writer.name(PreferencesManager.ORGANISATION).value(user.getOrganisation());
				writer.name(PreferencesManager.NICKNAME).value(user.getNickname());
				writer.name(PreferencesManager.EMAIL).value(user.getEmail());
				writer.name(PreferencesManager.WEBSITE).value(user.getWebsite());
				writer.name(PreferencesManager.ADDRESS).value(user.getAddress());
				
				writer.endObject();
			}
			
			writer.endArray();
			writer.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
		finally{
			try {
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

其中localfile是static File localfile; 在构造是可以使用下面的代码

localfile = new File(Environment.getExternalStorageDirectory() + "/TYT/files/history");
		if(!localfile.exists())
			try {
				localfile.mkdirs();
			} catch (Exception e) {
				e.printStackTrace();
			}

现在数据会存在外存卡/TYT/files/history/history.json中,

2. 读取数据

/**
	 * 读取本地数据 
	 * @return
	 */
	@SuppressLint("NewApi")
	public static void getAllContacts(){
		/*if(user == null){
			user = new User(sp.getString("USER_NAME", ""), sp.getString("SIM_PHONE", ""), sp.getString("USER_PHONE", ""),
					sp.getString("USER_TEXT", ""));
		}*/
		all_counts = black_counts = delete_counts = contacts_counts = 0;
		if(user == null)
			users = new ArrayList<User>();
		else
			users.clear();
		
//		users.add(user);
//		try {
//			new FileOutputStream(localfile.getPath() + "/history.json");
//		} catch (FileNotFoundException e1) {
//			e1.printStackTrace();
//		}
		JsonReader reader = null;
		try {
			String history = localfile.getPath() + "/history.json";
			if(!new File(history).exists())
				new File(history).createNewFile();
			reader = new JsonReader(new InputStreamReader(new FileInputStream(history), "UTF-8"));
			reader.beginArray();
			while (reader.hasNext()) {
				reader.beginObject();
				User u = new User();
				while (reader.hasNext()) {
					String name = reader.nextName();
					if(name.equals(PreferencesManager.USER_NAME)){
						u.setName(reader.nextString());
					}else if(name.equals(PreferencesManager.USER_PHONE)){
						u.setPhone(reader.nextString());
					}else if(name.equals(PreferencesManager.USER_STATE)){
						u.setState(reader.nextString());
					}else if(name.equals(PreferencesManager.USER_IM)){
						u.setIm(reader.nextString());
					}else if(name.equals(PreferencesManager.ADDRESS)){
						u.setAddress(reader.nextString());
					}else if(name.equals(PreferencesManager.EMAIL)){
						u.setEmail(reader.nextString());
					}else if(name.equals(PreferencesManager.NICKNAME))
						u.setNickname(reader.nextString());
					else if(name.equals(PreferencesManager.WEBSITE))
						u.setWebsite(reader.nextString());
					else if(name.equals(PreferencesManager.ORGANISATION))
						u.setOrganisation(reader.nextString());
					else
						reader.skipValue();
				}
				reader.endObject();
//				boolean repeat = true;
//				for (User user : users) {
//					if(user.getPhone().equals(u.getPhone())){
//						repeat = false;
//						break;
//					}
//				}
//				if(repeat){
					users.add(u);
					all_counts ++;
//				}
			}
			reader.endArray();
			reader.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally
		{
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			//adapterDatas();
		}
	}

users是程序中的数据容器。

其中读取数据时需要先检查文件是否存在,如果不存在就需要创建,否则可能会报错,不过也看程序的具体设计。而写数据的时候不用检查,系统会自动创建不存在的文件。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值