Autore Topic: intent sempre sulle stesse schermate in modo circolare  (Letto 756 volte)

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
intent sempre sulle stesse schermate in modo circolare
« il: 22 Febbraio 2011, 23:03:44 CET »
0
Salve ragazzi! allora in pratica ciò che devo fare è chiamare sempre le stesse schermate, ogni volta con parametri diverisi(risolto con gli extras) . Tali schermate partono ad esempio da storia.java, che ha un intent verso informazione.java che ha un intent verso storia.java. quindi diciamo che è una struttura circolare.

In realtà questo è solo un esempio per capire come dovrei fare..., perchè dovrei usare molte più schermate di 2.

allora il problema è questo: i parametri che io passo in realtà li estraggo da un file xml, di cui ho fatto precendentemente un parser e memorizzato tutto in un arraylist.  quindi mi basta fare la get(i) per ottenere l'informazione da passare.
tale i , che ho chiamato "tappa_corrente" volevo sfruttarlo per fare un for di dimensione sizeTemplate, ovvero delle "lunghezza" dell'arrylist che contiene le informazioni prese col parser:
   int  sizeTemplate=xml.explore.mainExplore.parserTemplate.getParsedData().size();
ma non mi riesce semplice. in pratica ad ogni get() estraggo le informazioni che mi servono (ovvero testo e path) per attivare la schermata sucessiva mediaplayer.java.
una volta seguito il mediaplayer e cliccato su procedi (metodo procedi in mediaplayer) passo alla schermata successiva ovvero informazioni.java.
Quest'ultima la rimando a storia.java. e qui ora dovrei cambiare la i della get() dell'arraylist, per leggere informazioni diverse e rifare il ciclo delle schermate. dovrei dunque incrementara.
non sò se ci avete capito qualcosa...., ma non sò nemmeno io come spiegarlo per bene!  :-(



storia.java
Codice (Java): [Seleziona]
public class storia extends Activity{
        @Override
        public void onCreate(Bundle savedInstanceState) {
                //se si può parametrizzare un intent allora qui ci sarà la logica di gioco e non si chiamerà più storia
                super.onCreate(savedInstanceState);
                //setContentView(R.layout.mediaplayer);
                //potrei chiamare mediaplayer e ogni volta pasargli il nodo testo da visualizzare
                //e quindi da ascoltare
                //faccio un for molto ampio :) imposto la i ke verrà incrementata ogni volta.. che giungo in questa schermata e lo controllo con sizeTemplate
                //da qui dovrebbe iniziare il for
               
                   int  sizeTemplate=xml.explore.mainExplore.parserTemplate.getParsedData().size();
                   //for(int i=0;i<sizeTemplate;i++){
                        //acquisisco tappa_corrente che sarà uguale a quello ke ho! ma ora lo devo incrementare e reiniziare il grande for tra schermate
                  // avvia_storia(tappa_corrente);//cioè adesso è zero
                        Bundle ricevi_da=new Bundle();
                        int tappa_corrente_piu_piu=ricevi_da.getInt("tappa_corrente");//che è uguale a zero
                        //incremento e chiamo mediaplayer che chiamerà altri (informazione e altri)
                        int tappa_corrent=tappa_corrente_piu_piu+1;
                        //if(tappa_corrent==sizeTemplate){
                                //allora non ci sono più righe in parsercontext e quindi stop gioco
                                //}
                        avvia_storia(tappa_corrent);
        }
               
               
       
       
        public void avvia_storia(int tappa_corrente){
                try{
                        //tappa_corrente=tappa_corrente+1;
                String testo_storia=xml.explore.mainExplore.parserContext.getParsedDataContext().get(tappa_corrente).getStoria();
                //l'audio lo metto in explore
                String  path=xml.explore.mainExplore.parserContext.getParsedDataContext().get(tappa_corrente).getAudiotts();
Intent media1=new Intent(storia.this, mediaplayer.class);
                  Bundle passa_a = new Bundle();
                  passa_a.putString("testo_storia", testo_storia);
          passa_a.putString("path", path);
          passa_a.putBoolean("flag_rientro", false);
          passa_a.putInt("tappa_corrente", tappa_corrente);
          media1.putExtras(passa_a);
                startActivity(media1);
               
                }
                catch(NullPointerException e){}
        }
}

mediaplayer.java
Codice (Java): [Seleziona]
public class mediaplayer extends Activity {

            private MediaPlayer mMediaPlayer = new MediaPlayer();
          boolean flag_rientro;
           private String  path;
           TextView storia_scritta;
           public int tappa_corrente;
             @Override
             public void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.mediaplayer);
                 Bundle ricevi_da = getIntent().getExtras();
                 String testo=ricevi_da.getString("testo_storia");
                 String path=ricevi_da.getString("path");
              tappa_corrente=ricevi_da.getInt("tappa_corrente");
                  flag_rientro=ricevi_da.getBoolean("flag_rientro");
               storia_scritta=(TextView)findViewById(R.id.storia);
                this.prepare_mediaplayer(testo,path,flag_rientro);
             }
               
           

    /** Called when the activity is first created. */
 
   public void prepare_mediaplayer(String testo, String path,boolean flag_rientro){
         
           
     
        this.setPath(path);
        storia_scritta.setText(testo);
      // storia_scritta.setText("La Cattedrale di Bari è un'altra importante struttura religiosa e architettonica, dedicata a San Sabino di Canosa, fu iniziata in stile bizantino nel 1034, ma distrutta nel 1156. Un nuovo edificio venne costruito tra il 1170 1178, in parte ispirato a quello di San Nicola. Della struttura originale rimangono solo alcune tracce della pavimentazione del transetto. L'architettura visibile oggi è quella romanica e si caratterizza per la bella facciata con i tre portali. La cripta ospita le reliquie di San Sabino e l'icona della Madonna Odigitria. Il Castello Svevo Normanno è un'altra meta da non mancare; fu eretto da Ruggero II di Sicilia intorno a 1131. Distrutto nel 1156, fu ricostruita da Federico II di Hohenstaufen. Oggi ospita una galleria d'arte con esposizioni temporanee.");
    // setContentView(storia_scritta);
      //  Bundle extras = getIntent().getExtras();
        //playAudio(extras.getInt(MEDIA));
       
                playAudio();
    }
public void setPath(String path){
        this.path=path;
}
    public void playAudio() {
       
         if (path == "") {
             // Tell the user to provide an audio file URL.
             Toast
                     .makeText(
                             mediaplayer.this,
                             "Please edit MediaPlayer_Audio Activity, "
                                     + "and set the path variable to your audio file path."
                                     + " Your audio file must be stored on sdcard.",
                             Toast.LENGTH_LONG).show();

         }
       // mMediaPlayer = new MediaPlayer();
        try {
                        mMediaPlayer.setDataSource(path);
                        mMediaPlayer.prepare();
                } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
         
}
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // TODO Auto-generated method stub
        if (mMediaPlayer != null) {
            mMediaPlayer.release();
            mMediaPlayer = null;
        }

    }
   
   
    public void playResource(View button) {
        try {
               
                       
                         mMediaPlayer.start();
                } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
       
       
        //System.out.println("CLICCO PLAY");    
       
    }
 
   public void stopResource(View button) {
       
       
        try {
                 mMediaPlayer.stop();
             mMediaPlayer.reset();
             mMediaPlayer.setDataSource(path);
                        mMediaPlayer.prepare();
                } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
       // System.out.println("CLICCO STOP");
       
    }
   public void pauseResource(View button) {
       
       mMediaPlayer.pause();
       //System.out.println("CLICCO PAUSE");
     
   }
   public void procedi(View Button){
           if(flag_rientro==false){
                   //intent a info
                   Intent info=new Intent(mediaplayer.this,informazione.class);
                   //gli passo la i del grande for, ovvero tappa_corrente
                   Bundle passa_a=new Bundle();
                   System.out.println("valoredella tappa in procedi"+ tappa_corrente);
                   passa_a.putInt("tappa_corrente", tappa_corrente);
                   info.putExtras(passa_a);
                   startActivity(info);
           }
   }
   
   
}
informazioni.java
Codice (Java): [Seleziona]
public class informazione extends Activity{
         @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                //per testare se è tutto ok, togliere dai commenti la seguente istruzione e la textviwe result
                setContentView(R.layout.informazione);
                Bundle ricevi_da=new Bundle();
                int tappa_corrente=ricevi_da.getInt("tappa_corrente");
                //ricevuto ora lo uso così com'è...
                TextView vediamo=(TextView)findViewById(R.id.informazione1);
                vediamo.setText(tappa_corrente);
               // tappa_corrente=tappa_corrente+1;
                //ora lo invio a storia che dovrebbe incrementarlo e inviare a mediaplayer l'incremento
                //lo incremento o qui o a storia
             
                Intent storia=new Intent(informazione.this,storia.class);
                Bundle passa_a=new Bundle();
                passa_a.putInt("tappa_corrente", tappa_corrente);
                storia.putExtras(passa_a);
                startActivity(storia);
                //this.passa(tappa_corrente);
               
         }
        /* public void passa(int tappa_corrente){
               
                storia s=new storia();
                s.avvia_storia(tappa_corrente);
         }*/

}
ps:non ho da postare logcat, perchè non c'è nessun errore, è la logica che è sbagliata. non riesco a far incrementare tappa_corrente che è la variabile che gestisce la get() e mi permette di estrarre informazioni diverse, ogni volta . tali informazioni sono  quelle che devo poi passare alle altre schermate

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #1 il: 23 Febbraio 2011, 09:06:41 CET »
0
prova a passarti anche questa "i" come parametro degli extras, così ad ogni activity chiamata sai anche a che punto sei.
;)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #2 il: 23 Febbraio 2011, 10:26:38 CET »
0
si l'ho fatto... in realtà ho detto "i" per far capire che si tratta di una variabile di un for.   la "i" l'ho chiamata "tappa_corrente"

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #3 il: 23 Febbraio 2011, 10:46:00 CET »
0
di fatto farà sempre la prima....

su storia, tu fai questo, all'onCreate:

Codice (Java): [Seleziona]
   Bundle ricevi_da=new Bundle();
   int tappa_corrente_piu_piu=ricevi_da.getInt("tappa_corrente");

se invochi la activity con un intent e degli extras, devi prenderti l'intent della chiamata e prendere il valore da lì...
cioè:

Codice (Java): [Seleziona]
int tappa_corrente = getIntent().getExtras().getInt("tappa_corrente", 0);
in questo modo la prima volta ti restituisce 0, le altre il valore passato.......
controlla che l'intent sia != null, prima di fare questo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #4 il: 23 Febbraio 2011, 16:08:36 CET »
0
Codice (Java): [Seleziona]
        //Bundle ricevi_da=new Bundle();
                        // tappa_corrente=ricevi_da.getInt("tappa_corrente");//che è uguale a zero
                        if(getIntent()!=null){
                        tappa_corrente=getIntent().getExtras().getInt("tappa_corrente",0);
                        }

errore nullpointer logcat:
Codice (XML): [Seleziona]
02-23 17:01:09.082: ERROR/AndroidRuntime(979): Caused by: java.lang.NullPointerException
02-23 17:01:09.082: ERROR/AndroidRuntime(979):     at occorrente_game_guide.storia.onCreate(storia.java:30)
02-23 17:01:09.082: ERROR/AndroidRuntime(979):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-23 17:01:09.082: ERROR/AndroidRuntime(979):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-23 17:01:09.082: ERROR/AndroidRuntime(979):     ... 11 more

uffy....
ma non è che tappa_corrente lo dovrei impostare come variabile globale, tipo come c'è scritto quii:http://www.anddev.it/index.php?topic=896.0   non l'ho mai fatto ora ci dò un'occhiata

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #5 il: 23 Febbraio 2011, 16:46:50 CET »
+1
hai controllato che l'intent e/o l'extras non siano nulli?
se uno dei 2 è nullo devi considerarlo 0.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #6 il: 23 Febbraio 2011, 17:47:19 CET »
0
ok ci voleva il controllo sul getExtras() .... comunque succedono cose strane, se non riesco a risolvere al massimo mi farò risentire!  :-P  grazie mille per l'aiuto!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:intent sempre sulle stesse schermate in modo circolare
« Risposta #7 il: 24 Febbraio 2011, 09:04:45 CET »
0
ok.
aspetto aggiornamenti, allora.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/