2017-10-06 5 views
1

Je veux afficher la barre de progression avec le pourcentage de téléchargement des données de json. En ce moment je reçois les données du url et stockez dans la base de données locale dans l'autre classe et cette classe appelée MainActivity. Maintenant, je veux montrer le progressbar avec le pourcentage du fichier de téléchargement de json url.Définir la barre de progression avec le pourcentage lorsque le téléchargement de données à partir de json obtenir la méthode dans android

C'est mon code

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; 
}` 

Activité principale

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

Je pense que ce post (https://stackoverflow.com/a/4591906/4730040) vous aidera à mettre à jour vos progrès –

Répondre

0

En doInBackground, vous devez publishProgress aussi. Pour que votre barre de progression peut mis à jour, comme celui-ci

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; 
    } 

Ici totalSize vous aidera à calculer vos données restantes au total et publishProgress sera publique il.