根据数据库大小

时间:2016-07-03 17:11:55

标签: android database progress-bar splash-screen

在我的启动画面中,我在从远程服务器下载数据时显示进度条。 我从远程数据库下载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%

进度

2) 或者从每个表的高级到比例设置,然后相应地设置进度。例如,如果我假设表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();
    }
}

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定是否有一种常见的方法&#34;为达到这个。如果您能够轻松找到表格的大小,那么您的第一个建议似乎更合理/准确。