Android 根据数据库大小计算ProgressBar大小
在我的闪屏中,我从远程服务器下载数据时显示了一个进度条。 我正在从远程数据库下载3个数据表。 每个桌子可以有不同的大小。 每个表下载过程由不同的函数调用。 我想在下载数据时计算并更新进度条 例如: 表1-100行 表2-30行 表3-230行 正在下载从方法doInBckground调用的数据: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();
@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中添加另一个表,该表只包含一个值—要下载的所有其他数据的大小?是的,类似于此,您可以快速访问。如果您不了解表格大小,则无法准确地进行进度更新。