Android:从dbAdapter更新UI文本视图

Android:从dbAdapter更新UI文本视图,android,progress-bar,android-sqlite,batch-processing,Android,Progress Bar,Android Sqlite,Batch Processing,在我的应用程序中,我有一个dbAdapter,其中一个函数对许多行执行批更新。早些时候,数据填充只需要几毫秒,我只是从主线程调用: dbAdapter.BatchUpdate() 但是,现在上述函数中的数据填充需要很多秒。我现在已经显示了一个不定进度条,并且正在通过Runnable执行上述操作 如何将其转换为水平进度条,在此可以根据要处理的行数和当前行数设置进度?由于函数以BEGIN和COMMIT开始和结束,我可能无法简单地提取行数并逐行处理(从UI) 编辑 下面是代码的摘录 /* In Mai

在我的应用程序中,我有一个
dbAdapter
,其中一个函数对许多行执行批更新。早些时候,数据填充只需要几毫秒,我只是从主线程调用:

dbAdapter.BatchUpdate()

但是,现在上述函数中的数据填充需要很多秒。我现在已经显示了一个
不定进度条
,并且正在通过
Runnable
执行上述操作

如何将其转换为
水平进度条
,在此可以根据要处理的行数和当前行数设置进度?由于函数以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) {}
    }
}
主活动中的
/**/
mlBinding.btnBatchUpdate.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
Runnable批处理=新建Runnable(){
@凌驾
公开募捐{
dbAdapter=新的dbAdapter(此);
dbAdapter.batchUpdate();
}
};
batch.run();
}
}
/*在DBAdapter类中*/
类DBAdapter{
私人DBHelper DBHelper;
私有数据库dbW;
私有数据库dbR;
公共布尔批处理更新(){
试一试{
execSQL(“BEGIN;”);
字符串[]ItemStopProcess=GetItemStopProcess();

对于(inti=0;i可能有很多不同的问题,例如

  • 在这里做一些很长的事情
    做延迟(通过java中的
    currentTimeMillis
    测量)
  • 通信延迟
  • 数据库执行SQL的时间太长

  • 因此,您必须首先定位问题…

    提供您的代码。我现在正在加密数据,因此加密部分需要时间。