2011-10-24 9 views
1

J'ai besoin d'implémenter la barre de progression dans un projet android quand une intention est passée à travers une autre activité, et qu'une partie des données de l'internet est en cours de téléchargement dans une seconde activité et en tant que telle délai entre le moment où l'utilisateur clique sur un élément et le moment où l'activité s'affiche.Android: dialogue de progression

J'ai essayé quelques approches différentes pour cela, mais rien ne semble fonctionner comme souhaité. J'utilise le code suivant pour cela. Et le dialogue de progression va à l'intérieur d'une boucle infinie.

  public class BackgroundAsyncTask extends AsyncTask<String, Integer, Bitmap> { 

      int myProgress; 

      @Override 

      protected void onPostExecute(Bitmap result) { 
       iv.setVisibility(View.VISIBLE); 
       iv.setImageBitmap(result); 
       dialog.cancel(); 
       dialog.dismiss(); 
      } 

      @Override 
      protected void onPreExecute() { 
      dialog = ProgressDialog.show(ProfileNormalUserPhotos.this, "Loading...", "Please wait..."); 

      } 

      @Override 
      protected Bitmap doInBackground(String...paths) { 
      return DownloadFile(imageUrl); 

     } 
      @Override 
      protected void onProgressUpdate(Integer... values) { 
      // TODO Auto-generated method stub 
      progressBar.setProgress(values[0]); 
      } 

     } 

    public Bitmap DownloadFile(String url){ 
     URL myFileUrl; 
     Bitmap bitmap=null; 
     try { 

      myFileUrl = new URL(imageUrl); 
     HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection(); 
     conn.setDoInput(true); 
     conn.setConnectTimeout(10000); 
     conn.setReadTimeout(10000); 
     conn.connect(); 
     InputStream is = conn.getInputStream(); 
     bmImg = BitmapFactory.decodeStream(is); 
     bitmap = BitmapFactory.decodeStream((InputStream) new URL( 
     imageUrl).getContent()); 
     bitmap = Bitmap.createScaledBitmap(bitmap,70 , 70, true); 
     System.out.println("name of bitmap"+bitmap.toString()); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      System.out.println(e); 
     } 
     return bitmap; 

    } 

Et voici ma classe d'adaptateur

   public class ImageAdapter extends BaseAdapter { 
       Context mContext; 
    private String[] stringOnTextView; 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 
    // BitmapManager.INSTANCE. setPlaceholder(BitmapFactory.decodeResource( 
    //   context.getResources(), R.drawable.icon)); 


    public ImageAdapter(Context Context, 
      String[] stringOnTextView) { 
     this.mContext=Context; 
     this.stringOnTextView=stringOnTextView; 
    } 

    public int getCount() { 
     return stringOnTextView.length; 
    } 


    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 


    public View getView(int position, View convertView, ViewGroup parent) { 

     System.out.println("**************"+position); 

     View v = null; 
     if(convertView==null){ 


      try{ 

      { 
        System.gc(); 
       // dialog = ProgressDialog.show(ProfileNormalUserPhotos.this, "Loading...", "Please wait..."); 
        imageUrl = "http://ondamove.it/English/images/users/"; 
        imageUrl=imageUrl+stringOnTextView[position]; 
        System.out.println(imageUrl); 

        LayoutInflater li = getLayoutInflater(); 
        v = li.inflate(R.layout.icon, null); 
        TextView tv = (TextView)v.findViewById(R.id.text); 
        tv.setText("Profile Image "+(position+1)); 
        /* URL myFileUrl = new URL(imageUrl); 
        HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection(); 
        conn.setDoInput(true); 
        conn.setConnectTimeout(10000); 
        conn.setReadTimeout(10000); 
        conn.connect(); 
        InputStream is = conn.getInputStream(); 

        bmImg = BitmapFactory.decodeStream(is); 
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL( 
         imageUrl).getContent()); 

        bitmap = Bitmap.createScaledBitmap(bitmap, 80, 80, true);*/ 

        // new ImageView(mContext); 
        iv= (ImageView)v.findViewById(R.id.image); 
        new BackgroundAsyncTask().execute(imageUrl); 
        //iv.setImageBitmap(bitmap); 
        //dialog.cancel(); 

        // System.out.println(bitmap.getHeight()); 

        System.out.println("++++++++"+R.id.image); 


        } 
      }catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println(e); 
     } 
     } 
     else 
     { 
      try{ 
      v = convertView;} 
      catch(Exception e){ 
       System.out.println(e); 
      } 
     } 
     return v; 
    } 
} 

Quelqu'un peut-il me aider sur ce sujet?

Répondre

2

Essayez AsyncTask,

private class myAsyncTask extends AsyncTask<String, Void, Void> 
    { 
     ProgressDialog mProgressDialog; 
     @Override 
     protected void onPreExecute() { 
      mProgressDialog = ProgressDialog.show(Activity_name.this, "Loading...", "Please wait..."); 
     } 
     @Override 
     protected Void doInBackground(String... params) { 

        String url = params[0]; 
      // you can do download from internet here 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void result) { 
      mProgressDialog.dismiss(); 
     } 
    } 
0

Android AsyncTask sa réponse pour ce dont vous avez besoin. Regardez ici Android - AsyncTask

+0

J'ai essayé cela aussi mais ça ne fonctionne pas – Aditya1510

+0

Qu'est-ce qui ne fonctionne pas? AsyncTask? ou vous avez un problème pour l'implémenter? – user370305

0

L'astuce consiste à

setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

pour votre ProgressDialog.

Questions connexes