CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

Problema ProgressDialog (caricamento...)

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Problema ProgressDialog (caricamento...)

    ciao a tutti

    ho un problema: ho un'app che disegna grafici e per elaborare i dati e salvare tutti i punti ci mette tipo 4 o 5 secondi

    in questo intervallo vorrei visualizzare una finestrina con scritto tipo waiting...

    Ho provato a usare la progressdialog ma mi da un errore dopo aver visualizzato la finestra di caricamento
    ERRORE:

    codice:
    07-16 20:27:09.797: E/AndroidRuntime(11754): FATAL EXCEPTION: AsyncTask #1
    07-16 20:27:09.797: E/AndroidRuntime(11754): java.lang.RuntimeException: An error occured while executing doInBackground()
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.os.AsyncTask$3.done(AsyncTask.java:200)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.lang.Thread.run(Thread.java:1096)
    07-16 20:27:09.797: E/AndroidRuntime(11754): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.View.requestLayout(View.java:8125)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.ViewGroup.addView(ViewGroup.java:1863)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.ViewGroup.addView(ViewGroup.java:1822)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.view.ViewGroup.addView(ViewGroup.java:1802)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at com.example.tablayout.Graficas.GraficoTutteTemperature(Graficas.java:918)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at com.example.tablayout.Graficas$HttpGetTask.doInBackground(Graficas.java:944)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at com.example.tablayout.Graficas$HttpGetTask.doInBackground(Graficas.java:1)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at android.os.AsyncTask$2.call(AsyncTask.java:185)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    07-16 20:27:09.797: E/AndroidRuntime(11754): 	... 4 more
    07-16 20:27:11.767: E/WindowManager(11754): Activity com.example.tablayout.TabLayout has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44f3b6b0 that was originally added here
    07-16 20:27:11.767: E/WindowManager(11754): android.view.WindowLeaked: Activity com.example.tablayout.TabLayout has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44f3b6b0 that was originally added here
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.ViewRoot.<init>(ViewRoot.java:247)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.Window$LocalWindowManager.addView(Window.java:424)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.app.Dialog.show(Dialog.java:241)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.app.ProgressDialog.show(ProgressDialog.java:107)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.app.ProgressDialog.show(ProgressDialog.java:95)
    07-16 20:27:11.767: E/WindowManager(11754): 	at com.example.tablayout.Graficas$6.onClick(Graficas.java:133)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.View.performClick(View.java:2408)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.view.View$PerformClick.run(View.java:8816)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.os.Handler.handleCallback(Handler.java:587)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.os.Looper.loop(Looper.java:123)
    07-16 20:27:11.767: E/WindowManager(11754): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-16 20:27:11.767: E/WindowManager(11754): 	at java.lang.reflect.Method.invokeNative(Native Method)
    07-16 20:27:11.767: E/WindowManager(11754): 	at java.lang.reflect.Method.invoke(Method.java:521)
    07-16 20:27:11.767: E/WindowManager(11754): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-16 20:27:11.767: E/WindowManager(11754): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-16 20:27:11.767: E/WindowManager(11754): 	at dalvik.system.NativeStart.main(Native Method)
    07-16 20:27:12.537: I/Process(11754): Sending signal. PID: 11754 SIG: 9
    come posso fare?
    P.S. ho preso pezzi di codice da esempi su questo forum e su internet, quindi può darsi che ci siano errori anche per questo

    allego pezzi di codice

    codice:
    Button jBtnCrea3 = (Button) this.findViewById(R.id.button3);
    		jBtnCrea3.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				
    				//barra caricamento di 6 secondi, solo che inizia quando inizia il grafico!!
    				
    				 pd = ProgressDialog.show(Graficas.this,"Creando il grafico","Connecting...",true,false);
    		            // creo e avvio asynctask
    		            HttpGetTask task = new HttpGetTask();
    		           task.execute("ciao");
    		           
    
    
    				
    
    			}
    		});
    codice:
    private class HttpGetTask extends AsyncTask<String,String,String>  {
    
    	      @Override
    	      protected String doInBackground(String... params) {
    
    	         String result = null;
    	         
    	       
    	            
    	            // aggiorno la progress dialog
    	            publishProgress("Attendere prego");
    	            
    	           //QUESTO È IL METODO CHE CI METTE SECOLI!!!
    				GraficoTutteTemperature();
    	            
    	           
    	            
    	            
    	         
    	         return result;
    	         
    	      }
    
    	      @Override
    	      protected void onProgressUpdate(String... values) {
    	         // aggiorno la progress dialog
    	         pd.setMessage(values[0]);
    	      }
    
    	      @Override
    	      protected void onPostExecute(String result) {
    	         // chiudo la progress dialog
    	         pd.dismiss();
    	     
    
    	      }
    	   }
    GRAZIE 1000
    Ultima modifica di mauro21; 16-07-12 alle 20:29

  2.  
  3. #2
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    ps. la guida che ho seguito è questa

    [facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia

    per maggior chiarezza allego il codice del metodo "lentissimo"

    codice:
    public void GraficoTutteTemperature(){
    		
    		
    		
    		
    		LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
    
    		// PULISCI ZONA GRAFICI
    		layout.removeAllViewsInLayout();
    
    		
    		List<Double> ejey1 = new ArrayList<Double>();
    		List<Integer> ejex1 = new ArrayList<Integer>();
    		List<Integer> supp = new ArrayList<Integer>();
    		List<String> date = new ArrayList<String>();
    		
    
    		List<GraphViewSeries> serie = new ArrayList<GraphViewSeries>();
    		
    		int colori[] = { -65281, -16711936, -3355444, -65536, -1, -256 };
    		
    		int dimetem=0;
    		String pre="";
    		
    		//analizzo il file: prendo le date e le salvo in date (senza doppioni) e riempio le liste x
    		// i grafici sulla temperatura
    		try {
    			File ruta_sd = Environment.getExternalStorageDirectory();
    
    			File f = new File(ruta_sd.getAbsolutePath(),
    					"temperatura_solo_datos.txt");
    
    			BufferedReader fin = new BufferedReader(
    					new InputStreamReader(new FileInputStream(f)));
    			int dia=0;
    			while (true) {
    				String due = fin.readLine();
    				if (due == null)
    					break;
    				else {													
    												
    					String datafile = "" + due.charAt(1)
    							+ due.charAt(2) + "-" + due.charAt(4)
    							+ due.charAt(5) + "-" + due.charAt(7)
    							+ due.charAt(8) + due.charAt(9)
    							+ due.charAt(10);
    				
    						
    					if(dimetem==0)
    						date.add(datafile);
    					else if(!pre.equals(datafile)&&dimetem!=0){
    							date.add(datafile);
    							dia+=24*60;}
    					
    					
    					int ora = dia
    							+ (60 * Integer.parseInt(""
    									+ due.charAt(13) + due.charAt(14)) + Integer
    										.parseInt("" + due.charAt(16)
    												+ due.charAt(17)));
    					ejex1.add(ora);
    					double temp = Double.parseDouble(""
    							+ due.charAt(21) + due.charAt(22) + "."
    							+ due.charAt(24));
    					ejey1.add(temp);
    					
    					
    				
    					pre=datafile;
    					dimetem++;
    					
    			}
    				
    			}
    			
    			fin.close();
    			
    		}	
    		
    		
    		
    		catch (Exception ex) {
    
    			//Toast.makeText(getApplicationContext(),
    				//	getString(R.string.nosd), Toast.LENGTH_LONG).show();
    			
    		}
    				
    /////INIZIO CREAZIONE GRAFICI EVENTI		
    		
    		
    		
    		
    		
    		for (int x = 0; x < stri.size(); x++) {
    
    			
    			int giorno = 0;
    			int contr=0;
    			
    			
    			
    			supp.clear();
    			
    			for (int i = 0; i < (24*60)*(date.size()); i++)
    			supp.add(i, 26);
    			
    			for(int q=0;q<date.size();q++){
    	
    						
    						
    						String datafile = date.get(q);
    
    
    						if (q>0) 
    							giorno += 60 * 24;
    				
    							for (int j = 0; j < lista.size(); j++) {
    
    								if (datafile.equals(lista.get(j)
    										.getData())
    										&& lista.get(j)
    												.getNome()
    												.equals(stri.get(x))) {
    
    									// DATA NEL FORMATO MINUTI
    									contr = 1;
    									int inizio = giorno
    											+ (60 * Integer
    													.parseInt(""
    															+ lista.get(
    																	j)
    																	.getInizio()
    																	.charAt(0)
    															+ lista.get(
    																	j)
    																	.getInizio()
    																	.charAt(1)) + Integer
    													.parseInt(""
    															+ lista.get(
    																	j)
    																	.getInizio()
    																	.charAt(3)
    															+ lista.get(
    																	j)
    																	.getInizio()
    																	.charAt(4)));
    									int fine = giorno
    											+ (60 * Integer
    													.parseInt(""
    															+ lista.get(
    																	j)
    																	.getFine()
    																	.charAt(0)
    															+ lista.get(
    																	j)
    																	.getFine()
    																	.charAt(1)) + Integer
    													.parseInt(""
    															+ lista.get(
    																	j)
    																	.getFine()
    																	.charAt(3)
    															+ lista.get(
    																	j)
    																	.getFine()
    																	.charAt(4)));
    
    
    										for (int i = inizio; i < fine; i++)
    											supp.add(i, 40);
    
    									
    								}}
    							
    						
    			
    			}
    			
    			
    			if (contr!=0){
    
    			
    			GraphViewData[] dati = new GraphViewData[supp.size()];
    			for (int i = 0; i < dati.length; i++)		
        				dati[i] = new GraphViewData(i, supp.get(i));
    			
    			serie.add(new GraphViewSeries(stri
    					.get(x),
    					new GraphViewStyle(
    							colori[x % 6], 3),
    					dati));
    			
    			}
    			
    			
    		}
    		
    		
    	/////FINE CREAZIONE GRAFICI EVENTI	
    		
    
    		// SE CI SONO DATI...
    		if (!date.isEmpty()) {
    
    			dimetem--;
    			GraphViewData[] memo = new GraphViewData[dimetem];
    			GraphViewData[] memomovil = new GraphViewData[dimetem];
    
    			// CALCOLO MEDIA MOVIL!!!!!!!!!
    			List<Double> ejey2 = new ArrayList<Double>();
    			int x1 = Integer.parseInt(te.getText().toString());
    
    			Mediamovil med = new Mediamovil();
    			ejey2 = med.returnMediamovil(ejey1, x1);
    
    			// QUI INSERISCO I PUNTI DEL GRAFICO TEMPERATURE
    			for (int k = 0; k < dimetem; k++)
    				memo[k] = new GraphViewData(ejex1.get(k), ejey1.get(k));
    
    			for (int k = 0; k < dimetem; k++)
    				memomovil[k] = new GraphViewData(ejex1.get(k), ejey2
    						.get(k));
    
    			// GESTIONE ASSE DELLE X CON ORARI 04:30 INVECE CHE NUMERI
    			// 270
    
    			LineGraphView graphView = new LineGraphView(
    					getApplicationContext(), getString(R.string.tempda)
    							+ " " + date.get(0) + " "
    							+ getString(R.string.tempal) + " "
    							+ date.get(date.size()-1)) {
    				@Override
    				protected String formatLabel(double value,
    						boolean isValueX) {
    					if (isValueX)
    						return returnnull2(value);
    
    					else
    						return super.formatLabel(value, isValueX); // let
    																	// the
    																	// y-value
    																	// be
    																	// normal-formatted
    				}
    			};
    
    			GraphViewSeries exampleSeries1 = new GraphViewSeries(
    					getString(R.string.temp), new GraphViewStyle(
    							Color.BLUE, 3), memo);
    			GraphViewSeries exampleSeries2 = new GraphViewSeries(
    					getString(R.string.tempmm), new GraphViewStyle(
    							Color.CYAN, 3), memomovil);
    
    			graphView.addSeries(exampleSeries1);
    			graphView.addSeries(exampleSeries2);
    
    			for (int i = 0; i < serie.size(); i++)
    				graphView.addSeries(serie.get(i));
    
    			graphView.setShowLegend(true);
    			graphView.setLegendAlign(LegendAlign.BOTTOM);
    			graphView.setLegendWidth(170);
    
    			graphView.setScrollable(true);
    			graphView.setViewPort(0, 360);
    			// VALORI SULLE X FISSI (ESSENDO STRING, SONO A DISTANZA
    			// FISSA)
    			// graphView.setHorizontalLabels(new String[]
    			// {"00:00","01:00","02:00","03:00","04:00", "05.00",
    			// "06:00","07:00","08:00","09:00","10.00","11:00","12:00","13:00","14:00","15.00","16.00","17.00","18.00","19.00","20.00","21.00","22.00","23.00","24.00",});
    			layout.addView(graphView);
    
    		} else {
    			Toast.makeText(getApplicationContext(),
    					getString(R.string.notemp), Toast.LENGTH_LONG)
    					.show();
    
    		}
    		
    		
    		
    		
    		
    	}
    Ultima modifica di mauro21; 17-07-12 alle 00:35

  4. #3
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    Potrebbe essere un problema dovuto al fatto che il tuo metodo viene chiamato dal doInBackground però modifica degli oggetti di layout.
    la doInBackground viene eseguita in un task asincrono (appunto) e "non ha diritti" per modificare gli oggetti del layout.

    La cosa migliore è modificarli nelle onPreExecute, onPostExecute oppure nella onProgressUpdate.

    La mia sensazione è che prima la funzione GraficoTutteTemperature venisse chiamata direttamente nell'activity, quindi correttamente magari vedevi un freeze dell'activity per qualche secondo ma accedevi correttamente agli elementi grafici del layout.

    Spostandola su un task asincrono devi anche fare in modo che le modifiche che deve apportare agli oggetti di layout vengano fatte nei posti corretti.

    Probabilmente (ma prendila solo come una indicazione di massima perchè non ho ne tutto il codice sotto mano ne troppo tempo per studiare il tutto) l'errore potrebbe essere nella layout.addView(graphView) (controlla il numero di riga con lo stacktrace del logcat per trovare il punto) e se è quello potresti ad esempio far si che la tua funzione GraficoTutteTemperature ritorni il LineGraphView creato e poi l'asyncTask nella onPostExecute dopo il dismiss, aggiunga la view, se != null, al tuo layout.

    (è una indicazione, non so se il problema sia li, comunque non ti basta spostare la chiamata nell'asyncTask ma devi anche modificare la funzione e togliere gli eventuali riferimenti ad oggetti di layout)

    Spero che trovi il problema, facci sapere !
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  5. Il seguente Utente ha ringraziato pourquoipas per il post:

    mauro21 (17-07-12)

  6. #4
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    GRAZIE 1000!!!!
    si l'errore principalmente era questo e ho provveduto lasciare nel metodo GraficoTutteTemperature() solo i calcoli e mettere le istruzioni

    LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
    layout.removeAllViewsInLayout();
    e
    layout.addView(graphView);

    nella postExecute().

    Funziona abbastanza bene, solo che non posso modificare il progressdialog durante l'esecuzione del metodo (x es incrementare la barra o stampare qualche messaggio)
    In pratica la progressdialog è "statica", cioe appare x la giusta durata ma rimane ferma senza aggiornarsi
    come potrei fare?
    quello che sto facendo è mettere in giro x il metodo comando tipo pd.incrementProgressBy(40);

    grazie

    EDIT:
    ok funziona tutto!!!
    mettendo questi comandi
    protected void onProgressUpdate(String... values) {
    // aggiorno la progress dialog
    pd.setMessage(values[0]);
    }

    posso inserire in mezzo al codice che si esegue in doinbackground dei publishProgress("ciao")
    per cambiar lo stato della progressdialog.

    GRAZIE 1000!!!
    Ultima modifica di mauro21; 17-07-12 alle 12:17 - Motivo: risolto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy