Autore Topic: Domanda base su Java/Android  (Letto 1319 volte)

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Domanda base su Java/Android
« il: 18 Agosto 2010, 10:53:28 CEST »
0
Ciao a tutti!
io ho questo pezzo di codice:

Codice (Java): [Seleziona]
btn.setOnClickListener(new OnClickListener(){  
     public void onClick(View v){
          int c=Integer.parseInt(lat.getText().toString());      
     }
});

Le mie domande sono 2:

1) come faccio a far vedere 'c' anche fuori dal metodo btn.setOnClickListener?  (attualmente se lo uso fuori mi dice che la variabile 'c' non è definita, quindi è come se al di fuori proprio non la vedesse)

2)Come faccio ad usare altri file .java appartenenti al progetto anche all'interno del metodo? (ho un altro file .java che fuori dal  btn.setOnClickListener viene normalmente chiamato e funziona, mentre se lo scrivo all'interno è come se non lo vedesse)

Mille grazie!
« Ultima modifica: 18 Agosto 2010, 11:42:07 CEST da MarcoDuff »

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Domanda base su Java/Android
« Risposta #1 il: 18 Agosto 2010, 11:25:21 CEST »
0
Problema 1)
Dipende dove vuoi usare la variabile... potresti dichiararla come variabile membro (quindi subito dopo la dichiarazione della classe) o come variabile interna. Dicci un poco di più su quello che vuoi fare e vediamo di trovare insieme il modo migliore.

Problema 2)
Questo è molto strano... sicuro di aver scritto bene il codice? Prova a postarlo tutto!

Off-Topic:
Consiglio:
quando scrivi del codice usa il tag nell'editor di scrittura per formattarlo! ;)

Adesso te lo sistemo io, la prossima volta provaci! ;)

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:Domanda base su Java/Android
« Risposta #2 il: 18 Agosto 2010, 16:13:21 CEST »
0
innanzitutto grazie della dritta su come postare il codice ed ora  ;-)... spiegazioni: questa  semplice mapActivity vuole  mostrare la mappa google con su disegnato un icona e una didascalica su le 2 città indicate (e fin qui tutto bene).

Io ora vorrei fare in modo che la mappa mostrasse anche un icona sulla città indicata dall'utente dopo che questo ha inserito latitudine e longitudine (lat e longi) ed ha premuto il bottone.

PROBLEMA1: i dati inseriti (chiamati a e b )rimangono dentro la funzione  btn.setOnClickListener, ed anche se li definisco all'inizio comunque fuori da qui non vengono letti

PROBLEMA2: il file "mistoGPSItemizeOverlay.java" che qui funziona perfettamente, se lo inserisco in btn.setOnClickListener non viene più trovato

PS: uso google8

Codice (Java): [Seleziona]
public class mistoGPS extends MapActivity {
       
        /**Necessario nel MapActivity*/
        @Override
        protected boolean isRouteDisplayed() {
            return false;
        }
   
       
       
        /** Called when the activity is first created. */      
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        /**per lo zoom*/
            MapView mapView = (MapView) findViewById(R.id.mapView);
                mapView.setBuiltInZoomControls(true);
                /**--------------fin qui visualizzo la mappa, con zoom--------------------*/
       
        final EditText lat = (EditText) findViewById(R.id.lat);
        final EditText longi = (EditText) findViewById(R.id.longi);
        final Button btn = (Button) findViewById(R.id.btn);
   
       
        btn.setOnClickListener(new OnClickListener(){  
                public void onClick(View v){
                    int a=Integer.parseInt(lat.getText().toString());
                    int b=Integer.parseInt(longi.getText().toString());
                 
                }
       
        });
     
       
       
                /**preparo l'overlay:preparo la lista, specifico l'icona, chiamo l'altro file .java*/
                List<Overlay> mapOverlays = mapView.getOverlays();
                Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
               
                mistoGPSItemizeOverlay itemizedoverlay = new mistoGPSItemizeOverlay(drawable, this);
                /**"mistoGPSItemizeOverlay" è la funzione che ho su un altro file .java per gli overlay*/
               
                /**indico il punto, e indico cosa mettere sul tap nel rispettivo punto*/
                GeoPoint point = new GeoPoint(40714353,-74005973);
                OverlayItem overlayitem = new OverlayItem(point, "Qui stai a", "NY ");
               
                GeoPoint point2 = new GeoPoint(44494219, 11346482);
                OverlayItem overlayitem2 = new OverlayItem(point2, "Qui sei a", "BOLOGNA");
       
               
               
                itemizedoverlay.addOverlay(overlayitem);
                itemizedoverlay.addOverlay(overlayitem2);
                mapOverlays.add(itemizedoverlay);

    }
         
}

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Domanda base su Java/Android
« Risposta #3 il: 18 Agosto 2010, 16:28:25 CEST »
+2
Anche se penso di aver intuito cosa non ti funziona, riesci a dire quale è l'errore che ti da?

Prova questo:
Codice (Java): [Seleziona]
btn.setOnClickListener(new OnClickListener(){  
        public void onClick(View v){
                int a=Integer.parseInt(lat.getText().toString());
                int b=Integer.parseInt(longi.getText().toString());

                List<Overlay> mapOverlays = mapView.getOverlays();
                Drawable drawable = mistoGPS.this.getResources().getDrawable(R.drawable.icon);
                mistoGPSItemizeOverlay itemizedoverlay = new mistoGPSItemizeOverlay(drawable, mistoGPS.this);
                GeoPoint point = new GeoPoint(a,b);
                OverlayItem overlayitem = new OverlayItem(point, "Qui stai a", "XXX");
                itemizedoverlay.addOverlay(overlayitem);
                mapOverlays.add(itemizedoverlay);
        }
});

Se ho intuito bene, il problema l'hai nell'utilizzo di this... ma in quel pezzo di codice stai dentro l'istanza anonima di un oggetto di tipo OnClickListener, quindi, in questo caso, il this si riferisce proprio a questa istanza anonima.

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:Domanda base su Java/Android
« Risposta #4 il: 18 Agosto 2010, 16:49:53 CEST »
0
Perfetto! ora funziona  ;-) mille grazie..

... ma mi rispondi a 3 domade?
1) l'hai capito solo guardando il codice?

2) se avessi voluto portare a e b fuori dal btn.setOnClickListener e usare i valori acquisiti per farci mille altri usi,come avrei potuto fare? Oppure sono costretto a rimanere sempre dentro quella funzione se voglio usare un dato acquisito tramite bottone?

3) all'interno di ogni funzione è possibile chiamare altri file .java del progetto basta che stia attento a come lo faccio?

Comunque davvero grazie, soprattutto della prontezza della risposta.. :-)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Domanda base su Java/Android
« Risposta #5 il: 18 Agosto 2010, 17:06:24 CEST »
0
1) l'hai capito solo guardando il codice?

Si! :D

2) se avessi voluto portare a e b fuori dal btn.setOnClickListener e usare i valori acquisiti per farci mille altri usi,come avrei potuto fare? Oppure sono costretto a rimanere sempre dentro quella funzione se voglio usare un dato acquisito tramite bottone?

La cosa migliore era sicuramente creare una funzione a parte dove venivano passati i parametri di latitudine, longitudine ed il testo da scrivere. In questo modo, centralizzi tutta il codice e lo rendi riusabile sia per il click nel bottone sia per quelli fissi (NY e Bologna).
Altrimenti puoi dichiararle come variabili membro (ovvero a livello di istanza, poso sotto la definizione di classe):
Codice (Java): [Seleziona]
public class mistoGPS extends MapActivity {
        private int a;
        private int b;

3) all'interno di ogni funzione è possibile chiamare altri file .java del progetto basta che stia attento a come lo faccio?

Si.

Piccolo consiglio di definizione: non chiamarli file .java ma Classi e per convenzione il nome di una classe inizia sempre con un carattere Maiuscolo, mentre l'istanza che si riferisce a quella classe sempre con il primo carattere minuscolo.

Quindi:
Codice (Java): [Seleziona]
MistoGPSItemizeOverlay itemizedoverlay = new MistoGPSItemizeOverlay(drawable, MistoGPS.this);nota la M maiuscola sia in MistoGPSItemizeOverlay  che in MistoGPS, mentre la i e la d minuscola di itemizedoverlay e drawable.

Per maggiori informazioni su come programmare in Java (quindi a prescindere da Android) ti consiglio dei link (che ha suggerito JD):

Link utili:

Libri consigliati: