Ich arbeite grade ein Buch über den scripting layer for android durch, und ich glaub bei einem Beispiel ist ein Fehler im code :
Das skript soll das Handy in den silent modus schalten sobald man sich an einem bestimmten Ort befindet, der per GPS geortet wird:
Code: Alles auswählen
from math import *
#berechnet den Abstand zwischen zwei Punkten
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
#convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radiants, [lon1, lat1, lon2, lat2])
#haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
km = 6367 * c
return km
import android, time
droid = android.Android()
lat1 = 33.111111
lon1 = 90.000000
droid.startLocating()
time.sleep(15)
while True:
loc = droid.readLocation().result
if loc == {}:
loc = droid.getLastKnownLocation().result
if loc != {}:
try:
n = loc["gps"]
except KeyError:
n = loc["network"]
la = n["latitude"]
lo = n["longitude"]
if haversine(la, lo, lat1, lon1) < 1:
droid.toggleRingerSilentMode(True)
else:
droid.toggleRingerSilentMode(False)
line 36 (das ist die Zeile : la=n["latitude"])
TypeError: "NoneType" object has no attribute "__getitem__"
Ich weiß das dieser Fehler bedeutet das irgendwo ein Wert 0 gesetzt wird ! Leider hab ich keine Ahnung was falsch ist .
Einen Fehler(im code aus dem Buch) hatte ich schon entdeckt. Aber irgendwas stimmt immer noch nicht :K
gruß