在我的启动画面中,我在从远程服务器下载数据时显示进度条。 我从远程数据库下载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();
}
}
谢谢
答案 0 :(得分:1)
我不确定是否有一种常见的方法&#34;为达到这个。如果您能够轻松找到表格的大小,那么您的第一个建议似乎更合理/准确。