2017-10-06 97 views
1

我想显示进度条从下载数据从json的百分比。现在我从url获取数据并将其存储在其他类的本地数据库中,并且此类名为MainActivity。现在我想从json url中显示下载文件的百分比progressbar设置ProgressBar的百分比从json的数据下载get方法在android

这是我的代码

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; 

    } 


}` 
+0

我认为[this](https://stackoverflow.com/a/4591906/4730040)帖子将帮助你更新你的进度 –

回答

0

在doInBackground,你需要publishProgress也。所以,你的进度条可以更新,这样

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将公开它。