Fehler invoke-virtual-Methode " doppelter android.Lage.Lage.getLatitude()' auf ein null-Objekt Verweis

Alles was ich versuche zu tun ist, damit der Benutzer erhalten Sie eine Liste der Orte, der Arten, die er mag. Zum Beispiel, wenn der Eingang " Krankenhaus meine Anwendung öffnen Sie google maps mit dem Suchbegriff "Krankenhaus". Aber wie vorgeschlagen in der Dokumentation über die geocode-wie geo:0,0?q=hospital uri zeigt alle Krankenhäuser in der Nähe von den Koordinaten 0 latitude & 0 Längengrad. Also, wenn ich habe versucht, um das Benutzer-Koordinaten zunächst durch den folgenden code.

Orte Decoder.java

package com.kkze.Mappy;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

public class PlacesDecoder extends Activity {
Intent intentThatCalled;
public double latitude;
public double longitude;
public LocationManager locationManager;
public Criteria criteria;
public String bestProvider;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    intentThatCalled = getIntent();
    String voice2text = intentThatCalled.getStringExtra("v2txt");
    getLocation(voice2text);
}
public static boolean isLocationEnabled(Context context)
{
    int locationMode = 0;
    String locationProviders;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        try
        {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
        return locationMode != Settings.Secure.LOCATION_MODE_OFF;
    }
    else
    {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }
}

public void getLocation(String voice2txt) {
    locationManager = (LocationManager)  this.getSystemService(Context.LOCATION_SERVICE);
    criteria = new Criteria();
    bestProvider = String.valueOf(locationManager.getBestProvider(criteria, true)).toString();
    Location location = locationManager.getLastKnownLocation(bestProvider);
    if (isLocationEnabled(PlacesDecoder.this)) {
            Log.e("TAG", "GPS is on");
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            Toast.makeText(PlacesDecoder.this, "latitude:" + latitude + " longitude:" + longitude, Toast.LENGTH_SHORT).show();
            searchNearestPlace(voice2txt);

        }
    else
    {
        AlertDialog.Builder notifyLocationServices = new AlertDialog.Builder(PlacesDecoder.this);
        notifyLocationServices.setTitle("Switch on Location Services");
        notifyLocationServices.setMessage("Location Services must be turned on to complete this action. Also please take note that if on a very weak network connection,  such as 'E' Mobile Data or 'Very weak Wifi-Connections' it may take even 15 mins to load. If on a very weak network connection as stated above, location returned to application may be null or nothing and cause the application to crash.");
        notifyLocationServices.setPositiveButton("Ok, Open Settings", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent openLocationSettings = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                PlacesDecoder.this.startActivity(openLocationSettings);
                finish();
            }
        });
        notifyLocationServices.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        notifyLocationServices.show();
    }
}

public void searchNearestPlace(String v2txt) {
    Log.e("TAG", "Started");
    v2txt = v2txt.toLowerCase();
    String[] placesS = {"accounting", "airport", "aquarium", "atm", "attraction", "bakery", "bakeries", "bank", "bar", "cafe", "campground", "casino", "cemetery", "cemeteries", "church", "courthouse", "dentist", "doctor", "electrician", "embassy", "embassies", "establishment", "finance", "florist", "food", "grocery", "groceries", "supermarket", "gym", "health", "hospital", "laundry", "laundries", "lawyer", "library", "libraries", "locksmith", "lodging", "mosque", "museum", "painter", "park", "parking", "pharmacy", "pharmacies", "physiotherapist", "plumber", "police", "restaurant", "school", "spa", "stadium", "storage", "store", "synagog", "synagogue", "university", "universities", "zoo"};
    String[] placesM = {"amusement park", "animal care", "animal care", "animal hospital", "art gallery", "art galleries", "beauty salon", "bicycle store", "book store", "bowling alley", "bus station", "car dealer", "car rental", "car repair", "car wash", "city hall", "clothing store", "convenience store", "department store", "electronics store", "electronic store", "fire station", "funeral home", "furniture store", "gas station", "general contractor", "hair care", "hardware store", "hindu temple", "home good store", "homes good store", "home goods store", "homes goods store", "insurance agency", "insurance agencies", "jewelry store", "liquor store", "local government office", "meal delivery", "meal deliveries", "meal takeaway", "movie rental", "movie theater", "moving company", "moving companies", "night club", "pet store", "place of worship", "places of worship", "post office", "real estate agency", "real estate agencies", "roofing contractor", "rv park", "shoe store", "shopping mall", "subway station", "taxi stand", "train station", "travel agency", "travel agencies", "veterinary care"};
    int index;
    for (int i = 0; i <= placesM.length - 1; i++) {
        Log.e("TAG", "forM");
        if (v2txt.contains(placesM[i])) {
            Log.e("TAG", "sensedM?!");
            index = i;
            Uri gmmIntentUri = Uri.parse("geo:" + latitude + "," + longitude + "?q=" + placesM[index]);
            Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
            mapIntent.setPackage("com.google.android.apps.maps");
            startActivity(mapIntent);
            finish();
        }
    }
    for (int i = 0; i <= placesS.length - 1; i++) {
        Log.e("TAG", "forS");
        if (v2txt.contains(placesS[i])) {
            Log.e("TAG", "sensedS?!");
            index = i;
            Uri gmmIntentUri = Uri.parse("geo:" + latitude + "," + longitude + "?q=" + placesS[index]);
            Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
            mapIntent.setPackage("com.google.android.apps.maps");
            startActivity(mapIntent);
            finish();
        }
    }
}
}

Das problem ist, dass immer und immer der Lage den Wert null zurück. Und ich weiß, für eine Tatsache, dass eine andere Anwendung Jarvis leicht hat die Aufgabe, so lange als Standort aktiviert ist, wenn nicht einfach fordert den Benutzer auf. Aber unter den gleichen Bedingungen meine Anwendung immer abstürzt.

Was ich getan habe:

  1. Verbrachte Tag und Nacht versucht, dieses problem zu lösen.
  2. Durchsucht zahlreiche Seiten über das Thema.
  3. Versucht, verschiedene codes, die von meiner eigenen.

Und es passiert immer noch. Ich bin ein Anfänger in Android.
Und bitte, bitte helfen Sie mir. Gibt es keine Möglichkeit mein problem zu lösen? dachte sogar, dass andere Anwendung, die es irgendwie schafft, es zu tun.

Diesem mein LogCat.

Process: com.kkze.Mappy, PID: 6742
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kkze.Mappy/com.kkze.Mappy.PlacesDecoder}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
        at android.app.ActivityThread.access$900(ActivityThread.java:172)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5832)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
        at com.kkze.Mappy.PlacesDecoder.getLocation(PlacesDecoder.java:62)
        at com.kkze.Mappy.PlacesDecoder.onCreate(PlacesDecoder.java:32)
        at android.app.Activity.performCreate(Activity.java:6221)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

Auch die überprüfung für die location!=null erfordert ACCESS_FINE_LOCATION Berechtigung, die vermasselt mir die app verursacht immer wieder als null.

  • So getLastKnownLocation wird null zurückgeben, die es dokumentiert, geschehen kann: "Wenn der provider ist derzeit deaktiviert ist, wird null zurückgegeben." Sollte Ihr code überprüfen und behandeln es entsprechend. Sie sagen, "unter denselben Bedingungen" sind solche Bedingungen, die Lage ist derzeit deaktiviert? Denn wenn dem so ist, gibt es nichts anderes zu erklären, wirklich.
  • Wie soll ich das machen? Unter den gleichen Bedingungen der anderen app funktioniert. Oder könnte es ein Weg sein, um mein problem zu lösen, ohne dabei die Position des Benutzers. Bitte helfen.
  • Ich bin sorry, wenn ich Druck Sie oder etwas, aber ich bin wirklich frustriert, dass ich nicht selbst lösen, etwas das einfach auch nach scheuern im Web für die besten, die ich kann. Sorry. Es ist schon über Mitternacht hier und ich kann immer noch nicht aufhören, dieses Problem auftreten.
  • Skeet Keine Stelle eingeschaltet. Meine app stürzt ab. Gelingt es. Wenn die Lage ist aus unseren beiden apps leiten den Benutzer auf die Seite "Einstellungen" einschalten.
  • Rechts, so dass die API verhält sich genau wie beschrieben. Sie sollten prüfen, ob location ist null vor dem aufrufen von Methoden auf: if (location == null) { /* take appropriate action */ } else { /* use location */ }
  • Bitte finden Sie unter meinem oben Bearbeiten. Gibt es eine Möglichkeit, dies zu tun, ohne immer den Benutzer lastKnownLocation.
  • Die überprüfung einer Referenz benötigt keine Besondere Genehmigung. Die Suche nach einer feinkörnigen Lage könnte, aber das ist nicht das gleiche. Und ich weiß nicht was du meinst mit "Mach das"... man sollte sich Mühe in die Herstellung Ihrer Frage klar. (Ich würde vorschlagen, entfernen Sie alle Bezug zu einer NullPointerException - wir wissen, was nichtig und warum, also die Ausnahme ist, ziemlich unerheblich.)
  • Es tut mir Leid Alles was ich versuche zu tun ist, damit der Benutzer erhalten Sie eine Liste der Orte, der Arten, die er mag. Zum Beispiel, wenn der Eingang " Krankenhaus meine Anwendung öffnen Sie google maps mit dem Suchbegriff "Krankenhaus". Aber wie vorgeschlagen in der Dokumentation über die geocode-wie geo:0,0?q=Krankenhaus uri zeigt alle Krankenhäuser in der Nähe von den Koordinaten 0 latitude & 0 Längengrad.
  • Ich vermute, dass die andere Anwendung sollte auch immer ein null-Zeiger-Ausnahme aus, wenn Sie versuchen, um den Nutzer Ort. So gibt es einen anderen Weg? Es wurde dokumentiert in der Google maps api, Google maps, suchen die Nähe, wenn Sie Breite 0 und Längengrad 0, aber das funktioniert nicht
  • Nein, ich vermute, dass die andere Anwendung ist zu prüfen, ob er den Empfang eines null-Lage in eine normale Art und Weise.
  • Skeet 08-30 01:54:42.735 11831 11831 E SELinux [DEBUG] get_category: variable seinfo: Standard-Empfindlichkeit: NULL, cateogry: NULL 08-30 01:54:43.335 11831 11831 E AndroidRuntime FATAL EXCEPTION: main 08-30 01:54:43.335 11831 11831 E AndroidRuntime-Prozess: com.MeineFirma.myapp4, PID: 11831 08-30 01:54:43.335 11831 11831 E AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MeineFirma.myapp4/com.MeineFirma.myapp4.MainActivity}:

InformationsquelleAutor KISHORE_ZE | 2015-08-29
Schreibe einen Kommentar