Autore Topic: Progress bar Android  (Letto 2265 volte)

Offline vannian

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Progress bar Android
« il: 21 Agosto 2012, 18:04:07 CEST »
0
Ciao tutti...
allora ho una classe che visualizza alcuni dati presi dal Database...

alcuni dati vengono passati dal altro activity... _(   Bundle extras1 = getIntent().getExtras();)

Il problema che ci mette un po di tempo per visualizzare le informazione... quindi in quel frattempo vorrei inserire un "progress bar" oppure "loading bar".
Qualcuno mi sa spiegare come si fa?

grazie


Codice (Java): [Seleziona]
public class ShowSelectedEvents extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.viewdetailsevents);

                Bundle extras1 = getIntent().getExtras();

                String eventTitle = extras1.getString("eventTitle");
                final String address = extras1.getString("address");
                String date = extras1.getString("date");
                String time = extras1.getString("time");
                final String fix = extras1.getString("fix");
                final String mobile = extras1.getString("mobile");
                final String web = extras1.getString("web");
                final String mail = extras1.getString("mail");
                String imageLink = extras1.getString("imageLink");
                final String videoLink = extras1.getString("videoLink");

                // Add item image
                Bitmap bitMap = null;
                try {
                        bitMap = DownloadImage(imageLink);
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                ImageView imageItem = (ImageView) findViewById(R.id.imageItem);
                imageItem.setImageBitmap(bitMap);


                TextView viewTitle = (TextView) findViewById(R.id.viewTitle);
                viewTitle.setText(eventTitle);

                TextView viewDateTime = (TextView) findViewById(R.id.dateTime);
                viewDateTime.setText("Event is on "+date +" @ "+ time);

                // View Address
                TextView viewAdd = (TextView) findViewById(R.id.viewAddress);  
                viewAdd.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
                viewAdd.setText(address);

                // On click open Navigation
                if (!(address.equals("-"))){
                        ImageView navigationIcon = (ImageView) findViewById(R.id.imageMapNavigation);
                        navigationIcon.setOnClickListener(new OnClickListener() {                      
                                @Override
                                public void onClick(View v) {

                                        String url = "google.navigation:q="+address;
                                        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));            
                                        startActivity(i);

                                }
                        });    
                }else{
                        Context context = getApplicationContext();
                        CharSequence text = "Address is incomplete!";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
                }

                // View Phone number
                TextView viewPhoneNumber = (TextView) findViewById(R.id.viewPhoneNumber);
                viewPhoneNumber.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
                viewPhoneNumber.setText(fix);

                // On click open call
                if (!(fix.equals("-"))){

                        viewPhoneNumber.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                        String url = "tel:"+fix;
                                        Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));     
                                        startActivity(i);
                                }
                        });
                }

                //View Mobile number
                TextView viewMobileNumber = (TextView) findViewById(R.id.viewMobileNumber);
                viewMobileNumber.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
                viewMobileNumber.setText(mobile);

                // on click call mobile number
                if (!(mobile.equals("-"))){

                        viewMobileNumber.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                        String url = "tel:"+mobile;
                                        Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));     
                                        startActivity(i);
                                }
                        });
                }


                //View web url
                TextView viewWeb = (TextView) findViewById(R.id.viewWeb);
                viewWeb.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
                viewWeb.setText(web);

                //on click open web browser
                if (!(web.equals("-"))){

                        viewWeb.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(web));
                                        startActivity(i);
                                }
                        });
                }


                TextView viewMail = (TextView) findViewById(R.id.viewMailAddress);
                viewMail.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
                viewMail.setText(mail);
                if(!(mail.equals("-"))){
                        viewMail.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
                                        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {mail});
                                        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Contact from tamilpage.ch");
                                        emailIntent.setType("text/plain");
                                        startActivity(Intent.createChooser(emailIntent, "Send a mail ..."));

                                }
                        });

                }


                // On click play the video
                if (!(address.equals("-"))){
                        ImageView videoIcon = (ImageView) findViewById(R.id.videoButton);
                        videoIcon.setOnClickListener(new OnClickListener() {                   
                                @Override
                                public void onClick(View v) {

                                        Intent browserIntent = new Intent(Intent.ACTION_VIEW,
                                                        Uri.parse(videoLink));
                                        startActivity(browserIntent);

                                }
                        });    
                }else{
                        Context context = getApplicationContext();
                        CharSequence text = "No advert video for this event";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
                }




        }

        private Bitmap DownloadImage(String url) throws Exception {

                Bitmap bitmap = null;
                InputStream in = null;
                try {
                        in = OpenHttpConnection(url);
                        bitmap = BitmapFactory.decodeStream(in);
                        in.close();
                } catch (IOException e1) {

                        e1.printStackTrace();
                }
                return bitmap;
        }

        private InputStream OpenHttpConnection(String url) throws Exception {
                InputStream in = null;
                int response = -1;
                System.out.println("Nishi1");
                URL url1 = new URL(url);
                URLConnection conn = url1.openConnection();

                if (!(conn instanceof HttpURLConnection))
                        throw new IOException("Not an HTTP connection");

                try{
                        HttpURLConnection httpConn = (HttpURLConnection) conn;
                        httpConn.setAllowUserInteraction(false);
                        httpConn.setInstanceFollowRedirects(true);
                        httpConn.setRequestMethod("GET");
                        httpConn.connect();

                        response = httpConn.getResponseCode();
                        if (response == HttpURLConnection.HTTP_OK) {
                                in = httpConn.getInputStream();
                                System.out.println(in);
                        }
                }
                catch (Exception ex)
                {
                        throw new IOException("Error connecting");
                }
                return in;
        }
}

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #1 il: 24 Agosto 2012, 09:57:00 CEST »
0
Mi accodo anche io alla richiesta!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Progress bar Android
« Risposta #2 il: 24 Agosto 2012, 09:58:52 CEST »
0
Qua trovate un esempio (vecchio ma sempre valido) di come eseguire un compito oneroso in un thread separato (in questo caso un asynctask) e visualizzare la progress bar sino a che non è completato.

[facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #3 il: 24 Agosto 2012, 10:10:39 CEST »
0
Quello che devo fare io è molto più semplice,il codice è questo

Codice: [Seleziona]
btnImport = (Button) findViewById(R.id.btnImport);
          btnImport.setOnClickListener(new OnClickListener()
                             {

                    public void onClick(View v) {
                            // TODO Auto-generated method stub
                            Log.i("IMPORT", "BEGIN");

                            //Richiamo il metodo che esegue il parse
                            startImport();
                            Log.i("IMPORT", "END");
                    }
            });

Dove startimport è un semplice metodo che fa il parsing di un file di testo.
Ora io vorrei far apparire il progressdialog(non quello con la barra di avanzamento ma semplicemente quello classico di attesa con l'immagine che ruota) non appena ho premo il button e mi si tolga dopo che i dati sono stati letti e visualizzati a schermo!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Progress bar Android
« Risposta #4 il: 24 Agosto 2012, 10:29:34 CEST »
0
Ora io vorrei far apparire il progressdialog(non quello con la barra di avanzamento ma semplicemente quello classico di attesa con l'immagine che ruota) non appena ho premo il button e mi si tolga dopo che i dati sono stati letti e visualizzati a schermo!

Sicuramente io ho scritto una parola leggermente diversa, ma è evidente che non hai nemmeno guardato gli screenshot nella pagina che ti ho linkato.  ;-)

Ti ho indirizzato a quel tutorial perchè quando un'azione comporta un tempo di elaborazione consistente, tale da dover mostrare un progress dialog, tale azione deve essere eseguita in un thread separato, altrimenti l'immagine che dovrebbe ruotare non ruota.  :-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #5 il: 24 Agosto 2012, 11:22:50 CEST »
0
Ho provato a fare cosi però mi compare per un attimo il progressdialog circa mezzo secondo poi mi restituisce la scermata ma senza dati,come se il metodo startimport() non viene eseguito
Codice: [Seleziona]
btnImport.setOnClickListener(new OnClickListener()
                             {

                    public void onClick(View v) {
                            progressDialog = ProgressDialog.show(ImportParoleActivity.this, "", "Loading...");

                                    new Thread() {

                                            public void run() {

                                            try{

                                    // TODO Auto-generated method stub
                                    Log.i("IMPORT", "BEGIN");

                                    //Richiamo il metodo che esegue il parse
                                    startImport();
                                    Log.i("IMPORT", "END");

                                            } catch (Exception e) {

                                            Log.e("tag", e.getMessage());

                                            }

                                            // dismiss the progress dialog

                                            progressDialog.dismiss();

                                            }

                                            }.start();

                    }
            });

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Progress bar Android
« Risposta #6 il: 24 Agosto 2012, 12:04:34 CEST »
0
... come se il metodo startimport() non viene eseguito

Metti un Log.d() appena entri in startimport e uno appena ne esci, così verifichi se ci passa.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #7 il: 27 Agosto 2012, 22:41:21 CEST »
0
Metti un Log.d() appena entri in startimport e uno appena ne esci, così verifichi se ci passa.

Ciao bradipao,ho fatto come da te suggerito e dentro startimport() ci entra,infatti vedo anche i dati stampati a video questa volta e dal debug vedo che prima vengono importati i dati e poi per pochi istanti viene visualizzato il progressdialog che subito scompare,e non viceversa.
Cosa sbaglio?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Progress bar Android
« Risposta #8 il: 28 Agosto 2012, 07:50:59 CEST »
0
Forse ci mette così poco ad impotare i dati, che il comportamento che osservi è corretto.

Sempre con i Log, verifica che la sequenza sia corretta: creazione progress, startimport, fine import, dismiss progress.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #9 il: 28 Agosto 2012, 08:23:31 CEST »
0
Forse ci mette così poco ad impotare i dati, che il comportamento che osservi è corretto.

Sempre con i Log, verifica che la sequenza sia corretta: creazione progress, startimport, fine import, dismiss progress.

Bradipao sto provando a vedere come dici tu ma mi sono accorto che i dati proprio non li scarica,mi fa vedere per un attimo solo il progressdialog senza scaricare niente ed infatti dal debug vedo che esegue il thread e poi esce subito dopo senza nemmeno entrarci nel thread quindi non esegue startImport().
Il debug termina con una looperclass!
« Ultima modifica: 28 Agosto 2012, 08:44:38 CEST da bombolo88 »

Offline bombolo88

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung next
Re:Progress bar Android
« Risposta #10 il: 29 Agosto 2012, 19:45:56 CEST »
0
Qualcuno che sappia come risolvere?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Progress bar Android
« Risposta #11 il: 30 Agosto 2012, 09:22:52 CEST »
0
Una possibile causa è che il dismissi della progressdialog all'interno del thread, cosa sostanzialmente non permessa (l'accesso ad elementi di UI deve avvenire nel threadi di UI).

Prova questo approccio:
[facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store