Autore Topic: Problema locationManager.requestLocationUpdates nullPointerExeption  (Letto 704 volte)

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Devo fare in modo che il location manager mi mandi le coordinate con un header HTTP  ad un mio sito ecco il codice:

Codice (Java): [Seleziona]
package com.gnusmash.gnusmashgdr;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.webkit.WebView;

public class Gnusmash extends Activity {
        Location userLocation = null;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webView);
       
        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {                  
                userLocation = location;
            }

            public void onStatusChanged(String provider, int status, Bundle extras) {}

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}
          };
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        //Ecco la riga dove si verifica l' errore:
        webView.loadUrl("http://ilmiosito.org/android/?latitude=" + Double.toString(userLocation.getLatitude()) + "&longitude=" + Double.toString(userLocation.getLongitude())  );
       
       
    }
}

Quando vado ad eseguire il programma(sia con un AVD sia con il dispositivo reale) mi dà questo errore:

Codice: [Seleziona]
03-19 18:51:14.460: E/AndroidRuntime(483): FATAL EXCEPTION: main
03-19 18:51:14.460: E/AndroidRuntime(483): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gnusmash.gnusmashgdr/com.gnusmash.gnusmashgdr.Gnusmash}: java.lang.NullPointerException
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.os.Looper.loop(Looper.java:123)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread.main(ActivityThread.java:4627)
03-19 18:51:14.460: E/AndroidRuntime(483):         at java.lang.reflect.Method.invokeNative(Native Method)
03-19 18:51:14.460: E/AndroidRuntime(483):         at java.lang.reflect.Method.invoke(Method.java:521)
03-19 18:51:14.460: E/AndroidRuntime(483):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-19 18:51:14.460: E/AndroidRuntime(483):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-19 18:51:14.460: E/AndroidRuntime(483):         at dalvik.system.NativeStart.main(Native Method)
03-19 18:51:14.460: E/AndroidRuntime(483): Caused by: java.lang.NullPointerException
03-19 18:51:14.460: E/AndroidRuntime(483):         at com.gnusmash.gnusmashgdr.Gnusmash.onCreate(Gnusmash.java:36)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-19 18:51:14.460: E/AndroidRuntime(483):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-19 18:51:14.460: E/AndroidRuntime(483):         ... 11 more

Come posso risolvere il problema? Dove ho sbagliato?

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:Problema locationManager.requestLocationUpdates nullPointerExeption
« Risposta #1 il: 19 Marzo 2012, 18:26:41 CET »
0
Cosa c'è alla riga 36 di Gnusmash.java ?  Uno degli oggetti in quella riga è NULL.

Codice: [Seleziona]
03-19 18:51:14.460: E/AndroidRuntime(483): Caused by: java.lang.NullPointerException
03-19 18:51:14.460: E/AndroidRuntime(483):         at com.gnusmash.gnusmashgdr.Gnusmash.onCreate(Gnusmash.java:36)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema locationManager.requestLocationUpdates nullPointerExeption
« Risposta #2 il: 19 Marzo 2012, 20:36:19 CET »
0
il problema è che tu attacchi un location listener e poi parti subito a usare la location, solo che all'inizio la location è null,possono volerci anche minuti per ottenere una location! devi fare il loadURL solo se location != null, oppure solo nell'onLocationChanged
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Re:Problema locationManager.requestLocationUpdates nullPointerExeption
« Risposta #3 il: 20 Marzo 2012, 15:51:10 CET »
0
Siccome ho bisogno di una posizione indicativa, non precisa e non aggiornata  spesso ho provato a modificare il codice in questo modo:
Codice (Java): [Seleziona]
package com.gnusmash.gnusmashgdr;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.webkit.WebView;


public class Gnusmash extends Activity {
    Location userLocation = null;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webView);
       
        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        userLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        //La riga con l' errore
        webView.loadUrl("http://ilmiosito.org/android/?latitude=" + Double.toString(userLocation.getLatitude()) + "&longitude=" + Double.toString(userLocation.getLongitude()));
       
       
    }
}

Ma mi dà sempre errore. Ecco il log:

Codice: [Seleziona]
03-20 16:38:26.662: E/AndroidRuntime(473): FATAL EXCEPTION: main
03-20 16:38:26.662: E/AndroidRuntime(473): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gnusmash.gnusmashgdr/com.gnusmash.gnusmashgdr.Gnusmash}: java.lang.NullPointerException
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.os.Looper.loop(Looper.java:123)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-20 16:38:26.662: E/AndroidRuntime(473):     at java.lang.reflect.Method.invokeNative(Native Method)
03-20 16:38:26.662: E/AndroidRuntime(473):     at java.lang.reflect.Method.invoke(Method.java:521)
03-20 16:38:26.662: E/AndroidRuntime(473):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-20 16:38:26.662: E/AndroidRuntime(473):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-20 16:38:26.662: E/AndroidRuntime(473):     at dalvik.system.NativeStart.main(Native Method)
03-20 16:38:26.662: E/AndroidRuntime(473): Caused by: java.lang.NullPointerException
03-20 16:38:26.662: E/AndroidRuntime(473):     at com.gnusmash.gnusmashgdr.Gnusmash.onCreate(Gnusmash.java:25)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-20 16:38:26.662: E/AndroidRuntime(473):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-20 16:38:26.662: E/AndroidRuntime(473):     ... 11 more

In questo caso userLocation non dovrebbe essere null perchè il metodo getLastKnownLocation dovrebbe sempre restituire un valore anche se vecchio di 10 giorni! Come mai mi dà errore?


@ bradipao : La riga in cui si verifica l' errore nel file java precedente è:
Codice (Java): [Seleziona]
 webView.loadUrl("http://ilmiosito.org/android/?latitude=" + Double.toString(userLocation.getLatitude()) + "&longitude=" + Double.toString(userLocation.getLongitude())  ); Mentre in quest' utimo listato la riga è:
Codice (Java): [Seleziona]
 webView.loadUrl("http://ilmiosito.org/android/?latitude=" + Double.toString(userLocation.getLatitude()) + "&longitude=" + Double.toString(userLocation.getLongitude()));

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema locationManager.requestLocationUpdates nullPointerExeption
« Risposta #4 il: 20 Marzo 2012, 19:05:14 CET »
0
debuggare no?
anche getLastKnown location può essere null, fatti un print in console della location e vedrai
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Re:Problema locationManager.requestLocationUpdates nullPointerExeption
« Risposta #5 il: 20 Marzo 2012, 21:22:26 CET »
0
Grazie dell‘ aiuto ma ho gia‘ risolto da me. Mi e‘ bastato fare una fusione tra il primo e il secondo listato!   8-)