从android中的json get方法下载数据时使用百分比设置进度条
Posted
技术标签:
【中文标题】从android中的json get方法下载数据时使用百分比设置进度条【英文标题】:Set Progressbar with percentage when data download from json get method in android 【发布时间】:2018-03-17 21:00:45 【问题描述】:我想显示进度条,显示从 json 下载数据的百分比。现在我正在从url
获取数据并存储在其他类的本地数据库中,这个类在MainActivity
中调用。现在我想显示 progressbar
以及来自 json url 的下载文件的百分比。
这是我的代码
public class Web_Product
Context context;
List<Variable> list = new ArrayList<Variable>();
//List<Variable> list1;
String url = "https://api.androidhive.info/progressdialog/hive.jpg";
URL url1 = null;
InputStream is1 = null;
String product_id, product_name, product_image;
private byte[] logoImage;
private JSONArray jsonArray;
public Web_Product(Context context)
this.context = context;
Log.e("hello", "Message");
public void product_insert()
// new AsyncLogin().execute();
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.e("TEST", "jsonStr:-" + jsonStr);
if (jsonStr != null)
try
JSONObject jsonRootObject = new JSONObject(jsonStr);
//Get the instance of JSONArray that contains JSONObjects
JSONArray jsonArray = jsonRootObject.optJSONArray("product");
//Iterate the jsonArray and print the info of JSONObjects
for (int i = 0; i < jsonArray.length(); i++)
Log.e("TEST_P", "in");
JSONObject details = jsonArray.getJSONObject(i);
product_id = details.getString("product_id");
product_name = details.getString("product_name");
product_image = details.getString("product_image");
logoImage = getLogoImage(product_image);
Variable variable_object = new Variable();
variable_object.setProduct_id(product_id);
variable_object.setProduct_name(product_name);
variable_object.setProduct_url_image(logoImage);
list.add(variable_object);
catch (JSONException e)
e.printStackTrace();
else
Log.e("ServiceHandler", "Couldn't get any data from the url");
Log.e("TEST1", " Ritunjay" + list.size());
Product_data product = new Product_data(context);
product.Insert_Product(list);
Log.e("listpo", "" + list);
public JSONArray json_web_prod()
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.e("TEST", "jsonStr:-" + jsonStr);
if (jsonStr != null)
try
JSONObject jsonRootObject = new JSONObject(jsonStr);
//Get the instance of JSONArray that contains JSONObjects
jsonArray = jsonRootObject.optJSONArray("product");
catch (JSONException e)
e.printStackTrace();
return jsonArray;
`
主要活动
class add extends AsyncTask<String, Integer, String>
ProgressDialog mProgressDialog;
@Override
protected void onProgressUpdate(Integer... values)
mProgressDialog.setProgress(values[0]);
@Override
protected void onPreExecute()
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("Downloading Data...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
@Override
protected void onPostExecute(String aVoid)
super.onPostExecute(aVoid);
mProgressDialog.dismiss();
flag = true;
Intent intent = getIntent();
startActivity(intent);
finish();
Log.e("flag , post", "" + flag);
@Override
protected String doInBackground(String... params)
web_product = new Web_Product(getApplicationContext());
web_product.product_insert();
return null;
`
【问题讨论】:
我认为this 的帖子会帮助您更新进度 【参考方案1】:在 doInBackground 中,您还需要发布进度。这样你的进度条就可以更新了,像这样
protected Long doInBackground(URL... urls)
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++)
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
return totalSize;
此处的 totalSize 将帮助您计算剩余数据总量,并且 publishProgress 将公开它。
【讨论】:
以上是关于从android中的json get方法下载数据时使用百分比设置进度条的主要内容,如果未能解决你的问题,请参考以下文章