首先介绍数据写入,写入到本地的是文本文件*.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是程序中的数据容器。
其中读取数据时需要先检查文件是否存在,如果不存在就需要创建,否则可能会报错,不过也看程序的具体设计。而写数据的时候不用检查,系统会自动创建不存在的文件。