Android 根据数据库大小计算ProgressBar大小

Android 根据数据库大小计算ProgressBar大小,android,database,progress-bar,splash-screen,Android,Database,Progress Bar,Splash Screen,在我的闪屏中,我从远程服务器下载数据时显示了一个进度条。 我正在从远程数据库下载3个数据表。 每个桌子可以有不同的大小。 每个表下载过程由不同的函数调用。 我想在下载数据时计算并更新进度条 例如: 表1-100行 表2-30行 表3-230行 正在下载从方法doInBckground调用的数据: @Override protected void doInBackground(String... params) { downloadTable1();

在我的闪屏中,我从远程服务器下载数据时显示了一个进度条。 我正在从远程数据库下载3个数据表。 每个桌子可以有不同的大小。 每个表下载过程由不同的函数调用。 我想在下载数据时计算并更新进度条

例如: 表1-100行 表2-30行 表3-230行

正在下载从方法doInBckground调用的数据:

    @Override
    protected void doInBackground(String... params) {
        downloadTable1();
        downloadTable2();
        downloadTable3();
    }
我想到了实现这一目标的两个选择: 1) 从所有3个表中获取数据大小,然后在开始下载之前,在进度条上计算每行下载数据的百分比。 对于上面的示例,要下载的100+30+230=360行。 将要下载的每一行将以0.27%的速度在进度条上前进

(二) 或者设置从“高级”到每个表的比例,然后相应地设置进度量。例如,如果我假定表3总是最大的,表2在中间是最小的和表1。 因此,我可以通过以下方式修复它们对进度条的影响: 表1 30% 表2 20% 表3 50% 然后,在每个方法中,下载表以仅取得该金额的进展

我的问题是,实现这一目标的常用方法是什么,即在从3个大小不同的数据库表下载数据时,制作准确的进度条,使其正确进行

下载数据的方法之一的示例:

//Download Table1 data and save it in SQLite MAINCAT Table
private void downloadTable1() {
    //-1 Code in PHP file to get Table1
    String respond = getHttpRespond(-1);                      //The String respond got from HTTP request
    DB_SQLiteManager db = new DB_SQLiteManager(context);    //Prepare SQLite database object for future downloaded data

    try {
        JSONObject jsonObject = new JSONObject(respond);                            //the result in JSON
        JSONArray jsonArray = jsonObject.getJSONArray("posts");                     //result in Array of JSON

        for (int i = 0; i < jsonArray.length(); i++) {
            //Update progressbar value
            totalProgressBarValue = totalProgressBarValue+i;
            publishProgress(totalProgressBarValue);

            JSONObject curr = jsonArray.getJSONObject(i);                           //Get current line

            String strID = curr.optJSONObject("post").optString("id");              //Get current string ID
            String strName = curr.optJSONObject("post").optString("name");          //Get current string et_Name
            String imageLink = curr.optJSONObject("post").optString("imagelink");
            String strPosition = curr.optJSONObject("post").optString("position");

            //Insert row of data to SQLite MAINCAT table
            db.addDataLineToTableMAINCAT(Integer.parseInt(strID), strName, imageLink, Integer.parseInt(strPosition));
            System.out.println("ADDEDD: " + strID + strName + imageLink + strPosition);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
//下载Table1数据并将其保存在SQLite MAINCAT表中
私有void下载表1(){
//-PHP文件中的1个代码用于获取表1
String respond=getHttpRespond(-1);//从HTTP请求获取的字符串响应
DB_SQLiteManager DB=newdb_SQLiteManager(context);//为将来下载的数据准备SQLite数据库对象
试一试{
JSONObject JSONObject=newJSONObject(respond);//JSON中的结果
JSONArray JSONArray=jsonObject.getJSONArray(“posts”);//生成JSON数组
for(int i=0;i

谢谢

我不确定是否有一种“通用方法”来实现这一点。如果您能轻松找到表格的大小,您的第一个建议似乎更合理/准确。

请显示下载表格方法为了找到它们的大小,我必须先下载它们?然后下载时进度条无法填充…是的,这是真的,但是,如果数据是由您控制的,您可以在开始下载大量数据之前检索表的大小。您的意思是在sql server中添加另一个表,该表只包含一个值—要下载的所有其他数据的大小?是的,类似于此,您可以快速访问。如果您不了解表格大小,则无法准确地进行进度更新。