स्थान प्रबंधक को सही परिणाम नहीं मिलते हैं

मैं शहर नाम पाने के लिए लेट, लांगी से कनवर्ट करने के लिए LocationManager का उपयोग कर रहा हूं, लेकिन मुझे गलत परिणाम मिल रहे हैं, मुझे लगता है कि इस कोड में कुछ गड़बड़ है:

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
       //Define the criteria how to select the locatioin provider -> use
       //default
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);

       //Initialize the location fields
        if (location != null) {
          System.out.println("Provider " + provider + " has been selected.");
          onLocationChanged(location);
          Log.d("msgh","msgh");
        } else {
             System.out.println("location not available");
            Log.d("msg","msg");
        }

कोड if statement में प्रवेश नहीं करता है और हमेशा अन्य कथन में प्रवेश करता है।

संपादन के बाद, यह logCat है:

11-24 15:06:25.072: E/AndroidRuntime(6963): FATAL EXCEPTION: main
11-24 15:06:25.072: E/AndroidRuntime(6963): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.survivingwithandroid.weatherapp/com.survivingwithandroid.weatherapp.MainActivity}: java.lang.NullPointerException
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.os.Looper.loop(Looper.java:137)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread.main(ActivityThread.java:5103)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at java.lang.reflect.Method.invokeNative(Native Method)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at java.lang.reflect.Method.invoke(Method.java:525)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at dalvik.system.NativeStart.main(Native Method)
11-24 15:06:25.072: E/AndroidRuntime(6963): Caused by: java.lang.NullPointerException
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.location.GeocoderParams.(GeocoderParams.java:50)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.location.Geocoder.(Geocoder.java:83)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at com.survivingwithandroid.weatherapp.MainActivity.onCreate(MainActivity.java:227)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.Activity.performCreate(Activity.java:5133)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-24 15:06:25.072: E/AndroidRuntime(6963):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
0
@Naddy हाँ मैं करता हूँ
जोड़ा लेखक roa.tah, स्रोत
क्या आपके पास आपके मैनिफेस्ट में सभी आवश्यक अनुमतियां हैं ??
जोड़ा लेखक Naddy, स्रोत

2 उत्तर

स्थान प्राप्त करने का पूरा कोड यहां दिया गया है। यह कोड आपको स्वचालित रूप से उपलब्ध सर्वोत्तम प्रदाता (जीपीएस या नेटवर्क) देगा। इसके अलावा, यह आपको अंतिम ज्ञात स्थान नहीं बल्कि वर्तमान स्थान देगा।

protected String currentLatitude, currentLongitude;
double lat, lon;
protected LocationManager locationManager;
private LocationListener ll;
locationManager = (LocationManager) getSystemService(
            Context.LOCATION_SERVICE);
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

            Toast.makeText(this,
                    "GPS enabled. Finding fine location. ",
                    Toast.LENGTH_SHORT).show();
        ll = new GpsListener();
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, ll);

    } else {
        if (locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {

                Toast.makeText(this,
                        "GPS disabled. Finding coarse location.",
                        Toast.LENGTH_SHORT).show();
            ll = new GpsListener();
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 0, 0, ll);

        } else {
            Toast.makeText(this,
                    "Enable location settings to get current location.",
                    Toast.LENGTH_LONG).show();

        }
    }

private class GpsListener implements LocationListener {

    public void onLocationChanged(Location location) {
       //TODO Auto-generated method stub
        if (location != null) {
            try {
                Toast.makeText(getApplicationContext(), "Location Found",
                        Toast.LENGTH_SHORT).show();
            } catch (Exception e) {

            }

            lat = location.getLatitude();
            lon = location.getLongitude();
                            Geocoder gcd = new Geocoder(context, Locale.getDefault());
                            try{
                            List
addresses = gcd.getFromLocation(lat, lon, 1); if (addresses.size() > 0) String cityName=addresses.get(0).getLocality(); } catch (IOException e) {} catch (NullPointerException e) {} currentLatitude = Double.toString(lat); currentLongitude = Double.toString(lon); try { if (ll != null) locationManager.removeUpdates(ll); } catch (Exception e) { } locationManager = null; } else { Toast.makeText(getApplicationContext(), "No Location Found", Toast.LENGTH_LONG).show(); } } public void onProviderDisabled(String provider) { //TODO Auto-generated method stub } public void onProviderEnabled(String provider) { //TODO Auto-generated method stub } public void onStatusChanged(String provider, int status, Bundle extras) { //TODO Auto-generated method stub } }// end of Class

संपादित करें- अपने एंड्रॉइड मैनिफेस्ट में निम्नलिखित अनुमतियां सुनिश्चित करें:

android.permission.INTERNET

android.permission.ACCESS_NETWORK_STATE

android.permission.ACCESS_COARSE_LOCATION

android.permission.ACCESS_FINE_LOCATION
0
जोड़ा
यह मुझे शहर का नाम नहीं देता है, जिसमें मुझे समस्या है !!
जोड़ा लेखक roa.tah, स्रोत
अब मैं NullPointerException प्राप्त कर रहा हूँ
जोड़ा लेखक roa.tah, स्रोत
अब कोई अपवाद नहीं है, लेकिन परिणाम गलत है, यह कहता है कि मैं भारत में हूं !!
जोड़ा लेखक roa.tah, स्रोत
अपना स्टैक ट्रेस पोस्ट करें।
जोड़ा लेखक Naddy, स्रोत
मैंने जवाब संपादित किया है और संपादन को विलय कर दिया है। जांचें कि यह अब काम करता है या नहीं। और यदि आपने कोड में कुछ भी बदल दिया है, तो कृपया मुझे बताएं।
जोड़ा लेखक Naddy, स्रोत
आपकी मुख्य गतिविधि में लाइन 227 क्या है?
जोड़ा लेखक Naddy, स्रोत

क्या आपने स्थान तय करने के लिए अपने जीपीएस चालू करने का प्रयास किया था? दस्तावेज़ के अनुसार, यह विधि वापस आती है:

प्रदाता के लिए अंतिम ज्ञात स्थान, या शून्य

सुनिश्चित करें कि आपके काम पर काम करने से पहले आपके फोन पर एक स्थान तय हो गया था। साथ ही, आप इस पोस्ट पर विचार करना चाहेंगे जो उपयोगकर्ता उपलब्ध होने के लिए एक अच्छी रणनीति को कवर करता है जब कोई उपलब्ध होता है या अन्यथा अनुरोध करता है।

आशा करता हूँ की ये काम करेगा।

0
जोड़ा
जीपीएस चालू है, और मुझे नहीं पता कि मुझे गलत परिणाम क्यों मिल रहे हैं
जोड़ा लेखक roa.tah, स्रोत
हाँ मुझे गलत परिणाम मिल रहे हैं
जोड़ा लेखक roa.tah, स्रोत
आप अभी भी शून्य या गलत परिणाम प्राप्त कर रहे हैं? वैसे, क्या आपने अपनी मैनिफेस्ट फ़ाइल में "android.permission.ACCESS_FINE_LOCATION" के लिए अनुमति जोड़ दी है?
जोड़ा लेखक Ricardo Lage, स्रोत