2013-10-27 8 views
15

मुझे यह काम करने के लिए मिला था, लेकिन जब मैंने अपने वाईफ़ाई को बंद कर दिया तो यह देखने के लिए कि क्या मैं अपने जीपीएस का उपयोग करके एक और सटीक स्थान प्राप्त कर सकता हूं, अब यह मुझे NullPointer त्रुटि ला रहा है और मैं नहीं देख सकता।getLastKnownLocation वापस लौटना NULL

नीचे दिए गए कोड को पहले कॉल किया जाता है;

public void onConnected(Bundle dataBundle) { 
     connected = true; 
     //Request an update from the location client to get current Location details 
     mLocationClient.requestLocationUpdates(mLocationRequest,this); 
     Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); 
    } 

कौन सा तो इस विधि जरूरत पर जोर देता बुलाया जा रहा है

public void onLocationChanged(android.location.Location location) { 
     // Report to the UI that the location was updated 
     String msg = "Updated Location: " + 
       Double.toString(location.getLatitude()) + "," + 
       Double.toString(location.getLongitude()); 
     if(tmp != location.getLatitude()) 
     { 
      Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
     } 
     tmp = location.getLatitude(); 
    } 

आप मैं वहाँ 2 टोस्ट है और वे वापस वास्तविक जीपीएस निर्देशांक के साथ ठीक आ लेकिन जब मैं नीचे दिए गए कोड को कॉल उस पर बाहर दुर्घटनाओं को देख सकते हैं नए स्थान लाइन getLastKnownLocation

public String getLocation() 
    { 
     // Get the location manager 
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     String bestProvider = locationManager.getBestProvider(criteria, false); 
     android.location.Location location = locationManager.getLastKnownLocation(bestProvider); 
     Double lat,lon; 
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     Date date = new Date(); 
     try { 
      lat = location.getLatitude(); 
      lon = location.getLongitude(); 
      Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show(); 
      return new LatLng(lat, lon).toString(); 
     } 
     catch (NullPointerException e){ 
      Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show(); 
      Log.e("HELL-NO","n",e); 
      e.printStackTrace(); 
      return null; 
     } 
    } 

मैं बस नहीं मिलता है कारण है कि जब मैं स्थान है, जोमें लिया गया गया लगता है प्राप्त करने का प्रयासविधि, यह सिर्फ एक nullpointer के साथ आता है।

+0

आप getLastLocation के लिए नए एपीआई और पुराने मिश्रण कर रहे हैं इस https://stackoverflow.com/a/48033659/4997704 –

उत्तर

7

जब आप नहीं चाहते हैं तो आप नए और पुराने स्थान एपीआई को एक साथ जोड़ रहे हैं।

अंतिम ज्ञात स्थान प्राप्त करने के लिए अपने सभी क्या करना है फोन

mLocationClient.getLastLocation(); 

एक बार स्थान सेवा से जुड़ा हुआ है।

पढ़ कैसे नए स्थान एपीआई

http://developer.android.com/training/location/retrieve-current.html#GetLocation

+1

चीयर्स @tyczj का पालन करें, वहाँ पता नहीं था एक "नया" एपीआई था, फिर से धन्यवाद! – r0bb077

27

मैं बस बदल

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) to 
locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 

यह मेरे लिए समाधान हल उपयोग करने के लिए। पूर्ण स्निपेट:

map = ((MapFragment) getFragmentManager(). 
      findFragmentById(R.id.map)).getMap(); 

    map.setMyLocationEnabled(true); 

    locationManager = (LocationManager)getSystemService 
      (Context.LOCATION_SERVICE); 
    getLastLocation = locationManager.getLastKnownLocation 
      (LocationManager.PASSIVE_PROVIDER); 
    currentLongitude = getLastLocation.getLongitude(); 
    currentLatitude = getLastLocation.getLatitude(); 

    currentLocation = new LatLng(currentLatitude, currentLongitude); 

आशा है कि इससे मदद मिलती है।

+2

यह मेरे लिए काम करता है लेकिन GPS_PROVIDER और PASSIVE_PROVIDER के बीच क्या अंतर है? –

+0

@ ऐशवात्सिंग http://stackoverflow.com/a/5655329/3878508 –

+0

@TroyZuroske कोई विचार क्यों निष्क्रिय प्रदाता इस समस्या को हल करता है? टक्कर के लिए खेद है। मेरे लिए भी काम किया, धन्यवाद! –

0

मैंने लंबे समय से इस के साथ संघर्ष किया। लेकिन Google बस एक समाधान के साथ आया था।

googleMap.getMyLocation(); 

एपीआई वी 2 पर नीले बिंदु का स्थान प्राप्त करने के लिए।

0

इस कोड का प्रयास करें:

LocationManager mLocationManager; 
Location myLocation = getLastKnownLocation(); 

private Location getLastKnownLocation() { 
    mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE); 
    List<String> providers = mLocationManager.getProviders(true); 
    Location bestLocation = null; 
    for (String provider : providers) { 
     Location l = mLocationManager.getLastKnownLocation(provider); 
     if (l == null) { 
      continue; 
     } 
     if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) { 
      // Found best last known location: %s", l); 
      bestLocation = l; 
     } 
    } 
    return bestLocation; 
} 
संबंधित मुद्दे