GPS abfrage gibt immer eine Nullpointer Exception

  • Antworten:1
JohaB
  • Forum-Beiträge: 6

31.10.2013, 12:12:04 via Website

Hallo,

Ich habe vor einer Woche oder so angefangen mal aus Spaß für Android zu programmieren. Da ich vorher Python programmiert hab und auch die ein oder andere Java Erfahrung hab, fiel mir das nicht ganz so schwer.

Zum ersten Test hab ich eine View mit 3 Buttons. 2 der 3 Buttons tun was sie sollen. Der Dritte Button soll beim drücken die aktuellen GPS Coordinaten abfragen.

Hier mein Code dafür:
1if (v == gpsButton)
2 {
3 LocationManager lm;
4 Criteria c=new Criteria();
5 lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
6 String provider=lm.getBestProvider(c, false);
7 Location loc = lm.getLastKnownLocation(provider);
8 Double lat,lon;
9 try
10 {
11 lon = loc.getLongitude();
12 lat = loc.getLatitude();
13 TextView test_text = (TextView)findViewById(R.id.Time_textview);
14 test_text.setText(String.valueOf(lon));
15 TextView test2_text = (TextView)findViewById(R.id.Time_textview);
16 test2_text.setText(String.valueOf(lat));
17 }
18 catch (NullPointerException e)
19 {
20 e.printStackTrace();
21 }

Das führt immer zu einer Nullpointer Exception, an der Stelle an der ich den Längengrad abfrage, also bei loc.getLongitude()
Ich weiss nicht ob ich den Listener brauche, denn ich will ja eigentlich gar nicht das die Koordinaten ständig abgefragt werden, nur beim betätigen des Buttons einmal.

Auf dem echten Handy fiel mir dann auch auf das das GPS symbol dabei nicht da ist. Bei maps, oder anderen apps die GPS verwenden geht immer die Anzeige dafür an. Hier aber nicht. Muss ich das irgendwie im code quasi initialisieren damit der Adapter überhaupt aktiv ist?
Also, nicht falsch verstehen, GPS hatte ich ein geschaltet. Die nötigen Rechte sollten auch gesetzt sein. Ich schätze hier kommt einfach nur der Umstand hinzu das ich das nur seit einer Woche mache :)

Ich wär euch für jede Hilfe dankbar.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

31.10.2013, 12:24:22 via Website

Ja, das Phone weiß evtl nicht wo do gerade bist. Zum einen brauchst du einen Listener, da je nach User einstellung die Location nicht immer sofort bekannt ist. Es gibt zu dem Thema diverse Talks von Retro Meier der einiges zu dem Thema sagen kann.

1lm.getLastKnownLocation(provider);

Liefert schlichtweg halt null zurück. In dem Fall müsstest du einfach einen Request einstellen und dann auf das ergebnis warten. Das Problem haben viele Apps. Du kannst das jetzt alles selbst schreiben, das Thema ist wenn man es wirklich gut machen will nicht trivial. Du kannst auch den FusedLocationProvider benutzen der jetzt in den PlayServices zu finden ist. Der liefert auch nicht __immer__ eine Location, hat aber den vorteil deutlich einfacher benutzt werden zu können. Auch dazu findet man Doc/Talks:

https://developer.android.com/training/location/index.html

Der Talk war Live noch cooler, aber du solltest das dir anschauen:

http://www.youtube.com/watch?v=Bte_GHuxUGc

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten