2017-02-20 3 views
0

Meine App verwendet LocationServices, um Standortaktualisierungen anzufordern. Er sendet die Ergebnisse über einen PendingIntent an einen Empfänger. In OnReceive() ein LocationResult ist aus der Absicht extrahiert, das eine Location ergibt, die dann in Bezug auf die Lat und Lng exprimiert wird, weiter verwendet werden. Klingt OK, oder?Ermitteln des Standorts aus einem LocationResult in onReceive()

Nun, die App begann mit NullPointerException zu crashen.

Ich untersuchte Debugger und fand, dass die drei Zeilen Code, die ich oben beschrieben gut ausgeführt, aber dann anstatt auf die folgenden Zeilen des Codes, die Ausführung wurde wieder zurück auf die erste der drei gerichtet Linien, die eine LocationResult aus einer Absicht extrahiert. Dies stellte sich nun als null heraus und stürzte in der folgenden Zeile mit NullPointerException ab, da LocationResult nicht als null angenommen wurde.

Ich habe keine Ahnung, warum das passiert. Irgendwelche Hinweise, bitte? (Sorry für das Wortspiel)

Hier ist mein Code:

public class MyLocationUpdateReceiver extends BroadcastReceiver { 

    private static final String TAG = "MyLocationUpdateRcvr"; 

// empty constructor 
    public MyLocationUpdateReceiver(){} 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.i(TAG,"onReceive update"); 

     // extract locationResult from intent received from Update Request 
     LocationResult locationResult = LocationResult.extractResult(intent); 
     double locationLat = locationResult.getLastLocation().getLatitude(); 
     double locationLng = locationResult.getLastLocation().getLongitude(); 

     // send the Lat and Lng of new location to MapActivity via intent 
     Intent mIntent = new Intent(context.getApplicationContext(), 
     MapActivity.class); 
     mIntent.putExtra("New_Lat", locationLat); 
     mIntent.putExtra("New_Lng", locationLng); 
     mIntent.addFlags(FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(mIntent); 

    } 
} 

Und hier ist der Screenshot des ersten Mal through.Note die LocationResult nicht null ist.

enter image description here

Noch immer auf der ersten ... Runde

enter image description here

und auf dem zweiten Mal ...

enter image description here

+0

Kann Ihre Absicht 'null' sein. – Piyush

+0

Das erste Mal ist es nicht null –

Antwort

0

Ich gehe davon aus Sie sind Verwenden Sie Ihren Empfänger während der Registrierung im Manifest. Sie müssen Broadcast-Empfänger mit Java-Codierung verwenden, ich meine dynamische Bindung. Einzelheiten zur Bindung finden Sie unter dem folgenden Link.

Dynamically registering a broadcast receiver

Und zweitens können Sie Sie können auch statt vorbei Absicht, wie Sie vorbei LocationResult.extractResult (Absicht) versuchen; evaluieren Absicht in onReceive() Methode

+0

Ich habe den Empfänger im Manifest und auch dynamisch in meinem Code registriert. Ihr zweiter Punkt war mir nicht klar, was Sie meinten. –

+0

Ich versuche zu sagen, Sie sollten versuchen, Absicht lokal zu verwenden. (Lokal bedeutet im Rahmen von onReceive). Kurz gesagt, übergeben Sie keine Absicht zu anderen Methode, um Daten zu extrahieren verwenden Sie die Absicht in onReceive-Methode Grenze –

+0

Wie extrahiere ich ein LocationResult von der Absicht wenn nicht mit extractResult()? –

Verwandte Themen