Android:从dbAdapter更新UI TextView

时间:2017-06-01 19:21:05

标签: android progress-bar android-sqlite batch-processing

在我的应用中,我有一个dbAdapter,其中一个函数会在很多行上进行批量更新。早些时候,数据填充只花了几毫秒而且从主线程中,我刚刚调用:

dbAdapter.BatchUpdate();

但是,现在上述函数中的数据填充需要很多秒。我现在已经显示了indeterminate progressBar并正在通过Runnable执行上述操作。

如何将其转换为horizontal progressBar我可以根据要处理的行数和当前行号来设置进度?由于函数以BEGIN和COMMIT开头和结尾,我可能无法简单地提取行数并逐行处理(来自UI)。

修改

这里是代码的摘录......

/* In Main Activity */
mlBinding.btnBatchUpdate.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Runnable batch = new Runnable() {
            @Override
            public void run() {
                dbAdapter = new DBAdapter(this);
                dbAdapter.batchUpdate();
            }
        };
        batch.run();
    }
}


/* In DBAdapter Class */
class DBAdapter {
    private DBHelper dbHelper;
    private SQLiteDatabase dbW;
    private SQLiteDatabase dbR;

    public boolean batchUpdate() {
        try {
            dbW.execSQL("BEGIN;");

            String[] itemsToProcess = getItemsToProcess();
            for (int i=0; i<itemsToProcess.length; i++) {
                //Do some really long stuff here
            }

            dbW.execSQL("COMMIT;");
        } catch (Exception e) {}
    }
}

1 个答案:

答案 0 :(得分:0)

这可能是很多不同的问题,例如

  1. Do some really long stuff here执行延迟(从currentTimeMillis开始测量)
  2. 通讯延迟
  3. DB执行SQL太长时间
  4. 所以你必须首先将问题本地化......