Sqlite 操作的数量阻止了 Android 异步 Http 客户端 onSuccess() 中的 UI


@Override
public void onStart() {
setCharset("GB2312");
progess_bar_PopupWindow();
}
@Override
public void onSuccess(String response) {
String[] split_array = JwcRegex
.parse_department_list(response);
Sql.dep_update(split_array);//here contain amount of sql insert operation
Toast.makeText(getApplicationContext(), "hello rex",
Toast.LENGTH_LONG).show();
if (pw_progress_window.isShowing()) {
pw_progress_window.dismiss();
}
}

当 http 请求开始时,progess_bar_PopupWindow()显示带有进度条的弹出窗口,但进度条仍然存在,请求后它在我的 onSuccess() 中关闭。 但删除了Sql.dep_update(split_array),进度条效果很好。 怎么处理?

我解决了这个问题。如下:

  1. 在 Sql 类中添加与查询和 exec 方法同步。
    并发读/写 sqlite 导致一些错误。同步关键字可以同步操作

  2. 将弹出窗口(带有我的进度条)显示在方法onWindowFocusChanged()中的方法showAtLocation()

  3. 将具有大量操作的方法放在新线程中。 代码如下:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (!hasLoad) {
get_departments();
hasLoad = true;
}
}
public void exec(String sql) {
synchronized (this) {
db.execSQL(sql);
}
}
@Override
public void onSuccess(String response) {
Yangtzeu.TempString = JwcRegex
.parse_department_list(response);
if (pw_progress_window.isShowing()) {
pw_progress_window.dismiss();
}
new Thread(new Runnable() {
public void run() {
JwcDB.dep_update(Yangtzeu.TempString);
ComDB.kv_set("dep_list_exp", "false");
}
}).start();
}

最新更新