Gson解析后的数据存到本地数据库 耗时的问题

最近一直在做数据同步 从接口那边拿到的数据存在本地数据库的过程中 加载数据的时间一直是个很头疼的问题 下面有两种方法 对比一下 第二种加载数据耗时更少 更为快捷一些

// [start] 字典数据同步
public static void getUpdateDictionary(final String clientVersion, final Context context) {
// TODO Auto-generated method stub
DicComplete=false;
HashMap<String, String> paramDictionary = new HashMap<String, String>();
paramDictionary.put("clientVersion", clientVersion);
System.out.println("=======getUpdateDictionary" + clientVersion);
BaseProtocol updateProtocol = new BaseProtocol(paramDictionary);
final String jsonDictionary = updateProtocol.toJson();

paramsDictionary = new RequestParams();
paramsDictionary.addQueryStringParameter("detail", jsonDictionary + "&" + DesityUtil.Random());

NetUtils.getData(HttpMethod.POST, ConstantValue.COMMON + ConstantValue.UPDATEDICTIONARY_URL, paramsDictionary, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Gson gsonDictionary = new Gson();
if (HispitalProtocol.checkResult(responseInfo)) {
System.out.println("=======responseInfo" + responseInfo);
final List<SysDicVO> fromJsonDictionary = gsonDictionary.fromJson(HispitalProtocol.getContentObj(responseInfo).toString(),
new TypeToken<List<SysDicVO>>() {}.getType());
new Thread() {
public void run() {
try {
Date curDate = new Date(System.currentTimeMillis());

db = DBManager.getInstance(new DBHelper(context)).openDatabase();
db.beginTransaction();
daoDictionary = new SysDicDaoImpl(db);

int row = 0;
for (int i = 0; i < fromJsonDictionary.size(); i++) {
SysDicVO sysDicVO = new SysDicVO();
sysDicVO.setId(fromJsonDictionary.get(i).getId());
sysDicVO.setCode(fromJsonDictionary.get(i).getCode());
sysDicVO.setName(fromJsonDictionary.get(i).getName());
sysDicVO.setParent_id(fromJsonDictionary.get(i).getParent_id());
sysDicVO.setBase_version(fromJsonDictionary.get(i).getBase_version());
sysDicVO.setStatus(fromJsonDictionary.get(i).getStatus());
// sysDicVO.setSort(0);

List<SysDicVO> sysDicVOs = daoDictionary.findByCondition(new String[] { DBHelper.T_ID },
DBHelper.T_ID + " = ? ", new String[] { sysDicVO.getId() }, null);
if (null != sysDicVOs && sysDicVOs.size() > 0) {
daoDictionary.update(sysDicVO, sysDicVO.getId());
} else {
daoDictionary.insert(sysDicVO);
}

// row = daoDictionary.update(sysDicVO, sysDicVO.getId());
// if (row==0){
// daoDictionary.insert(sysDicVO);
// }
}
db.setTransactionSuccessful();

Date endDate = new Date(System.currentTimeMillis());
long diff = endDate.getTime() - curDate.getTime();

Toast.makeText(context, "=================diff================ " + diff, 1000);

DicComplete=true;
} catch (Exception e) {
DicComplete=false;
e.printStackTrace();
} finally {
if (null != db)
db.endTransaction();
}
}
}.start();
}
}

@Override
public void onFailure(HttpException error, String msg) {
System.out.println("失败");
}
});
}
//[end]

// [start] 字典数据同步1
public static void getUpdateDictionary1(final String clientVersion, final Context context) {
// TODO Auto-generated method stub
DicComplete=false;
HashMap<String, String> paramDictionary = new HashMap<String, String>();
paramDictionary.put("clientVersion", clientVersion);
System.out.println("=======getUpdateDictionary1" + clientVersion);
BaseProtocol updateProtocol = new BaseProtocol(paramDictionary);
final String jsonDictionary = updateProtocol.toJson();

paramsDictionary = new RequestParams();
paramsDictionary.addQueryStringParameter("detail", jsonDictionary + "&" + DesityUtil.Random());

NetUtils.getData(HttpMethod.POST, ConstantValue.COMMON + ConstantValue.UPDATEDICTIONARY_URL, paramsDictionary, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Gson gsonDictionary = new Gson();
if (HispitalProtocol.checkResult(responseInfo)) {
System.out.println("=======responseInfo" + responseInfo);
final List<SysDicVO> fromJsonDictionary = gsonDictionary.fromJson(HispitalProtocol.getContentObj(responseInfo).toString(), new TypeToken<List<SysDicVO>>() {
}.getType());

new Thread() {
public void run() {
try {

Date curDate = new Date(System.currentTimeMillis());

db = DBManager.getInstance(new DBHelper(context)).openDatabase();
db.beginTransaction();
daoDictionary = new SysDicDaoImpl(db);

// List<SysDicVO> sysDicVOs = daoDictionary.findByCondition(new String[] { DBHelper.T_ID }, null, null, null);
//
// Map<String, String> maps = new HashMap<String, String>();
// for (SysDicVO sysDicVO : sysDicVOs) {
// maps.put(sysDicVO.getId(), sysDicVO.getId());
// }

StringBuffer sql_insert = new StringBuffer();
StringBuffer sql_update = new StringBuffer();

sql_insert.append(" replace into sys_dic (id, code, name, parent_id, base_version, status) values " +
"(?,?,?,?,?,?) ");

// sql_update.append(" update sys_dic set id = ?, code = ? , name = ? , parent_id = ?, base_version = ?, status = ? ");

SQLiteStatement stat_insert = db.compileStatement(sql_insert.toString());
// SQLiteStatement stat_update = db.compileStatement(sql_update.toString());

String id = null;
for (int i = 0; i < fromJsonDictionary.size(); i++) {
// id = maps.get(fromJsonDictionary.get(i).getId());
// if (null!=id && !"".equals(id) && id.equals(fromJsonDictionary.get(i).getId())) {
// stat_update.bindString(1,fromJsonDictionary.get(i).getId());
// stat_update.bindString(2,fromJsonDictionary.get(i).getCode());
// stat_update.bindString(3,fromJsonDictionary.get(i).getName());
// stat_update.bindString(4,fromJsonDictionary.get(i).getParent_id()!=null ? fromJsonDictionary.get(i).getParent_id():"");
// stat_update.bindString(5,fromJsonDictionary.get(i).getBase_version());
// stat_update.bindString(6,String.valueOf(fromJsonDictionary.get(i).getStatus()));
// stat_update.executeInsert();
// } else {
stat_insert.bindString(1,fromJsonDictionary.get(i).getId());
stat_insert.bindString(2,fromJsonDictionary.get(i).getCode());
stat_insert.bindString(3,fromJsonDictionary.get(i).getName());
stat_insert.bindString(4,fromJsonDictionary.get(i).getParent_id()!=null ? fromJsonDictionary.get(i).getParent_id():"");
stat_insert.bindString(5,fromJsonDictionary.get(i).getBase_version());
stat_insert.bindString(6,String.valueOf(fromJsonDictionary.get(i).getStatus()));
stat_insert.executeInsert();
//}



// long result = stat.executeInsert();
// if (result < 0) {
// returnfalse;
// }

}
db.setTransactionSuccessful();

Date endDate = new Date(System.currentTimeMillis());
long diff = endDate.getTime() - curDate.getTime();

Log.i("log", "=================diff================ " + diff);

DicComplete=true;
} catch (Exception e) {
DicComplete=false;
e.printStackTrace();
} finally {
if (null != db)
db.endTransaction();
}
}
}.start();
}
}

@Override
public void onFailure(HttpException error, String msg) {
System.out.println("失败");
}
});
}
//[end]

原文地址:https://www.cnblogs.com/achen0502/p/5108664.html