Autore Topic: Chi mi aiuta a capire il log?  (Letto 1424 volte)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Chi mi aiuta a capire il log?
« il: 15 Maggio 2010, 23:21:07 CEST »
0
Codice: [Seleziona]
05-15 21:14:37.524: ERROR/AndroidRuntime(245): Uncaught handler: thread main exiting due to uncaught exception
05-15 21:14:37.546: ERROR/AndroidRuntime(245): java.lang.RuntimeException: Unable to pause activity {it.alessandropiola.gestioneritirorifiuti/it.alessandropiola.gestioneritirorifiuti.AdvancedAppWidgetTestActivity}: java.lang.NullPointerException
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3120)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3077)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3060)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.access$2400(ActivityThread.java:119)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1832)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.os.Looper.loop(Looper.java:123)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.main(ActivityThread.java:4310)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at java.lang.reflect.Method.invokeNative(Native Method)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at java.lang.reflect.Method.invoke(Method.java:521)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at dalvik.system.NativeStart.main(Native Method)
05-15 21:14:37.546: ERROR/AndroidRuntime(245): Caused by: java.lang.NullPointerException
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at it.alessandropiola.gestioneritirorifiuti.AdvancedAppWidgetTestActivity.onPause(AdvancedAppWidgetTestActivity.java:355)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.Activity.performPause(Activity.java:3782)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1190)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3107)
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     ... 12 more
05-15 21:14:37.574: INFO/Process(64): Sending signal. PID: 245 SIG: 3
05-15 21:14:37.574: INFO/dalvikvm(245): threadid=7: reacting to signal 3
05-15 21:14:37.604: INFO/dalvikvm(245): Wrote stack trace to '/data/anr/traces.txt'
05-15 21:14:37.793: INFO/ARMAssembler(64): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x330250:0x33030c] in 535856 ns
05-15 21:14:37.824: INFO/ARMAssembler(64): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x331820:0x3319e8] in 1129455 ns
05-15 21:14:37.924: WARN/ActivityManager(64): Activity pause timeout for HistoryRecord{43c5a0c8 it.alessandropiola.gestioneritirorifiuti/.AdvancedAppWidgetTestActivity}
05-15 21:14:38.184: INFO/ARMAssembler(64): generated scanline__00000177:03515104_00000001_00000000 [ 73 ipp] (95 ins) at [0x32aff0:0x32b16c] in 583975 ns
05-15 21:14:38.224: INFO/ARMAssembler(64): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x32b170:0x32b27c] in 554718 ns
05-15 21:14:38.434: INFO/ActivityManager(64): Displayed activity com.android.launcher/.Launcher: 36109 ms (total 36109 ms)
05-15 21:14:44.403: INFO/Process(245): Sending signal. PID: 245 SIG: 9
05-15 21:14:44.423: INFO/WindowManager(64): WIN DEATH: Window{43c552d8 it.alessandropiola.gestioneritirorifiuti/it.alessandropiola.gestioneritirorifiuti.AdvancedAppWidgetTestActivity paused=false}
05-15 21:14:44.423: WARN/GpsLocationProvider(64): Unneeded remove listener for uid 1000
05-15 21:14:44.423: DEBUG/GpsLocationProvider(64): stopNavigating
05-15 21:14:44.443: INFO/ActivityManager(64): Process it.alessandropiola.gestioneritirorifiuti (pid 245) has died.
05-15 21:14:48.447: WARN/ActivityManager(64): Activity destroy timeout for HistoryRecord{43c5a0c8 it.alessandropiola.gestioneritirorifiuti/.AdvancedAppWidgetTestActivity}

vorrei capire che cosa mi da errore ma non so leggerlo.
grazie
ciao
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Chi mi aiuta a capire il log?
« Risposta #1 il: 15 Maggio 2010, 23:24:14 CEST »
0
Io darei uno sguardo alla riga 355 del file AdvancedAppWidgetTestActivity.java, sembra esserci un qualcosa che scatena un NullPointerException:
Codice: [Seleziona]
05-15 21:14:37.546: ERROR/AndroidRuntime(245): Caused by: java.lang.NullPointerException
05-15 21:14:37.546: ERROR/AndroidRuntime(245):     at it.alessandropiola.gestioneritirorifiuti.AdvancedAppWidgetTestActivity.onPause(AdvancedAppWidgetTestActivity.java:355)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Chi mi aiuta a capire il log?
« Risposta #2 il: 16 Maggio 2010, 17:42:37 CEST »
0
allora avevo capito giusto.
Ma mi chiedo ancora una cosa.
L'errore deriva dalla disattivazione del listener.
O meglio quando tolgo la if nel on pause.
Codice (Java): [Seleziona]
package it.alessandropiola.gestioneritirorifiuti;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;


import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
//import android.widget.Toast;


import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.EditText;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MyLocationOverlay;

public class AdvancedAppWidgetTestActivity extends MapActivity {
       

    private static final String FILE_PATH =  "confatto";
   
        private final static int WAITING_PROGRESS_DIALOG_ID = 1;
        /*
         * Riferimento all'Handler
         *
         *
         */

        Double geoLat ;
        Double geoLng ;

       
        private Handler myHandler;
        /*
         * Riferimento alla ProgressDialog
         */

        LocationManager locationManager;
        private ProgressDialog progressDialog;
        private TextView outputView;
        private EditText sendcomune;
        //private final static Spinner spinners;
        /*
         * Tag del Log
         */

        private final static String LOG_TAG = "SimpleHttpClientTestActivity";
        String Calendario = null;
    //Riferimento al MyLocationOverlay
   
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
                // Otteniamo il riferimento al LocationManager
        final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
               
                Log.w(LOG_TAG, "PUPPA:1");
                // Verifichiamo se il GPS è abilitato altrimenti avvisiamo l'utente
                if(!locationManager.isProviderEnabled("gps")){
                //      Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                        Log.w(LOG_TAG, "PUPPA:nogps");
                }
                Log.w(LOG_TAG, "PUPPA:3");
                // Registriamo il LocationListener al provider GPS
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                                0, locationListener);
               
                // Definiamo un SimpleAdapter
                ArrayAdapter<String> adapter = createSpinnerAdapter();
                // Associamo il layout del dropdown
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                // Otteniamo il riferimento allo Spinner
                Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
                // Associamo l'adapter alla Gallery
                spinner.setAdapter(adapter);
                outputView = (TextView) findViewById(R.id.outputhttp);
                //outputView.setText(spinner.getSelectedItem().toString());
               
               
                myHandler = new Handler() {

                        @Override
                        public void handleMessage(Message msg) {
                                // Estrapoliamo il messaggiodi testo dal msg
                                outputView.setText(msg.obj.toString());
                                Creofile();
                                Log.i(LOG_TAG, msg.obj.toString());
                        }};
    }
        LocationListener locationListener = new LocationListener() {
                        @Override
                        public void onLocationChanged(Location location) {
                                // Aggiorna il marker della mappa
                                // Aggiorna la location
                                geoLat = getRound(location.getLatitude(), 5);//location.getLatitude()*1E6;
                                geoLng = getRound(location.getLongitude(), 5);
                               
//                              outputView.setText(Double.toString(geoLng).toString()+ ':'+Double.toString(geoLat).toString());

                        }


                        @Override
                        public void onProviderDisabled(String provider) {
                                //Toast.makeText(AdvancedAppWidgetTestActivity.this,
                                        //      "onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
                                Log.w(LOG_TAG, "non enab");
                        }

                        @Override
                        public void onProviderEnabled(String provider) {
                //              Toast.makeText(AdvancedAppWidgetTestActivity.this,
                        //                      "onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
                                Log.w(LOG_TAG, "enble prov");

                        }

                        @Override
                        public void onStatusChanged(String provider, int status,Bundle extras) {
                                //Toast.makeText(AdvancedAppWidgetTestActivity.this,
                                        //      "onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();

                                 
                        }
                       

        };
            @Override
            public void onPause() {
                super.onPause();
                Log.w(LOG_TAG, "ferma il listener");
               
            if(locationManager != null){
                Log.w(LOG_TAG, " se passo");
                 locationManager.removeUpdates(locationListener);
           
                   // myLocationOverlay.disableMyLocation();
            }
            };

         


        /*
         * Incapsula a logica di invio della richiesta Http
         */

        public void SendComune(View button) {

                sendcomune = (EditText) findViewById(R.id.EditComune);
                final String TARGET_URL2 = "http://alessandropiola.brinkster.net/insert.asp?stringa="+sendcomune.getText().toString()+"&LAT="+Double.toString(geoLat).toString()+"&LON="+Double.toString(geoLng).toString();
                Log.w(LOG_TAG, TARGET_URL2);
                // Avviamo un Thread con il corrispondente codice di connessione
                Thread workerThread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                try {
                                        // Creiamo il riferimento al HttpClient
                                        HttpClient httpClient = new DefaultHttpClient();
                                        // Creiamo la HttpUriRequest relativamente al metodo GET
                                        HttpGet request = new HttpGet();
                                        // Impostiamo il valore dell'URI di destinazione
                                        URI targetUri = new URI(TARGET_URL2.replace(" ", "%20"));
//                                      URI targetUri = new URI("http://alessandropiola.brinkster.net/insert.asp?stringa="+sendcomune.getText().toString() );
                                        request.setURI(targetUri);
                                        // A questo punto invochiamo il server
                                        httpClient.execute(request, myResponseHandler);
                                } catch (Exception e) {
                                        showMessageOnOutput(e.getMessage());
                                        Log.e(LOG_TAG, e.getMessage());
                                } finally {
                                        dismissDialog(WAITING_PROGRESS_DIALOG_ID);
                                }

                        }

                });
                // Visualizziamo una Dialog di attesa
                showDialog(WAITING_PROGRESS_DIALOG_ID);                
                // Lo avviamo
                workerThread.start();
       
        };
   
        /*
         * Incapsula a logica di invio della richiesta Http
         */

        public void sendHttpRequest(View button) {
               
                final String TARGET_URL3 = "http://alessandropiola.brinkster.net/";
                Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
                //select del calendario
                Log.e(LOG_TAG, String.valueOf(spinner.getSelectedItemPosition())    );
                if ( spinner.getSelectedItemPosition() == 0) {
                        Calendario = "CodevigoPD.htm";
                }
                if ( spinner.getSelectedItemPosition() == 1) {
                        Calendario = "FontanafreddaPN.htm";
                }
                if ( spinner.getSelectedItemPosition() == 2) {
                        Calendario = "OttavianoNA.htm";
                }
                if ( spinner.getSelectedItemPosition() == 3) {
                        Calendario = "ArenellaNA.htm";
                }
                Log.e(LOG_TAG, TARGET_URL3 );
                //spinner.getSelectedItem().toString());
                // Avviamo un Thread con il corrispondente codice di connessione
               
                Thread workerThread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                try {
                                        // Creiamo il riferimento al HttpClient
                                        HttpClient httpClient = new DefaultHttpClient();
                                        // Creiamo la HttpUriRequest relativamente al metodo GET
                                        HttpGet request = new HttpGet();
                                        // Impostiamo il valore dell'URI di destinazione
                                        URI targetUri = new URI(TARGET_URL3+Calendario);
                                        request.setURI(targetUri);
                                        // A questo punto invochiamo il server
                                        httpClient.execute(request, myResponseHandler);
                                } catch (Exception e) {
                                        showMessageOnOutput(e.getMessage());
                                        Log.e(LOG_TAG, e.getMessage());
                                } finally {
                                        dismissDialog(WAITING_PROGRESS_DIALOG_ID);
                                }

                        }

                });
                // Visualizziamo una Dialog di attesa
                showDialog(WAITING_PROGRESS_DIALOG_ID);                
                // Lo avviamo
                workerThread.start();
        };

        @Override
        protected Dialog onCreateDialog(int id) {
                switch (id) {
                case WAITING_PROGRESS_DIALOG_ID:
                        progressDialog = new ProgressDialog(this,
                                        ProgressDialog.STYLE_SPINNER);
                        progressDialog.setTitle("HTTP Connection");
                        progressDialog.setMessage("Connessione...");
                        progressDialog.setIndeterminate(true);
                        return progressDialog;
                default:
                        return null;
                }
        };

        /**
         * Invia un messaggio all'Handler relativo al MainThread per la sua
         * visualizzazione nella TextView di output
         *
         * @param message
         *            Messaggio da visualizzare
         */

        private void showMessageOnOutput(String message) {
                Message messageToSend = myHandler.obtainMessage();
                messageToSend.obj = message;
                myHandler.sendMessage(messageToSend);
        };

        private final ResponseHandler<String> myResponseHandler = new ResponseHandler<String>() {

                @Override
                public String handleResponse(HttpResponse response)
                                throws ClientProtocolException, IOException {
                        // Estraiamo il risultato dalla risposta. Otteniamo quindi il content
                        // da cui leggere le informazioni
                        InputStream content = response.getEntity().getContent();
                        byte[] buffer = new byte[1024];
                        int numRead = 0;
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        while((numRead=content.read(buffer))!=-1){
                                baos.write(buffer, 0, numRead);
                        }
                        // Chiudiamo lo stream
                        content.close();
                        // Otteniamo il risultato
                        String result = new String(baos.toByteArray());
                        showMessageOnOutput(result);
                       
                        return result;
                }

        };

        /*
         * Metodo di utilità che permette di creare un SimpleAdapter
         */

        private ArrayAdapter<String> createSpinnerAdapter() {
                // Inizializziamo i dati
                String[] data = getResources().getStringArray(R.array.months);
                // Creiamo l'adapter
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, data);
                // Lo ritorniamo
                return arrayAdapter;
        };     

        private void Creofile() {

                CharSequence inputData = outputView.getText();
                // Otteniamo il valore associato al mode
                //long selectedId = spinnerMode.getSelectedItemId();
                int mode = Context.MODE_PRIVATE;
                // Resettiamo il messaggio di output
                //output.setText("");
                // Se diverso da null salviamo il contenuto su file
                try {
                        FileOutputStream fos = openFileOutput(FILE_PATH, mode);
                        DataOutputStream dos = new DataOutputStream(fos);
                        dos.writeUTF(inputData.toString());
                        dos.close();
                       
                } catch (IOException e) {
                        e.printStackTrace();
                }
        };


        public static double getRound(double x, int digits){
                double powerOfTen = Math.pow(10, digits);
                return ((double)Math.round(x * powerOfTen) / powerOfTen);

        };
        @Override
        protected boolean isRouteDisplayed() {
                // TODO Auto-generated method stub
                return false;
        }
   
        @Override
        protected void onResume() {
                super.onResume();
                // Registriamo il LocationListener al provider GPS
        //      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

        };
}


se lascio if invece esce senza errore ma il gps rimane attivo.
In pratica voglio leggere la posizione prima di fare il post del comune.
Ma quando esco o mi lascia il gps attivo o mi segnala l'errore postato sopra.

-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Chi mi aiuta a capire il log?
« Risposta #3 il: 16 Maggio 2010, 17:53:13 CEST »
0
Lo fa sull'emulatore o su un dispositivo reale?
L'emulatore è buggato e non si disattiva mai il gps. Se non l'hai già fatto provalo su un dispositivo reale.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Chi mi aiuta a capire il log?
« Risposta #4 il: 16 Maggio 2010, 20:58:12 CEST »
0
Lo fa sul tattoo ma il tuo tutorial funziona. Il mio invece non va. Nel onpause l'if del locationmanager non passa mai per la disaytivazione del listener. Se tolgo l'if mi.da.l'errore.come.da log
 
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Chi mi aiuta a capire il log?
« Risposta #5 il: 16 Maggio 2010, 21:20:09 CEST »
0
Non ne sono sicuro ma prova a liberarti del final:

Codice (Java): [Seleziona]
final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Comunque, se ho bene intuito quello che vuoi fare, non ti serve scomodare il GPS, dovrebbe bastarti un posizionamento approssimativo tramite Cell ID (che risulta essere molto più veloce e funziona anche dentro casa e dove il GPS non riceve).

Dai uno sguardo a questo tutorial: Location-Based Services Using CellID in Android
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Chi mi aiuta a capire il log?
« Risposta #6 il: 16 Maggio 2010, 21:20:43 CEST »
0
Nell'onCreate hai dichiarato un altro locationManager alla linea 72 e il suo scope è limitato all'interno di tale metodo.

Lascia solo:
Codice (Java): [Seleziona]
locationManager = ( LocationManager ) getSystemService( Context.LOCATION_SERVICE );
Così inizializzi l'oggeto locationManager che hai dichiarato alla riga 52.