11

लौटाता है मैं अपने निर्देशांक प्राप्त करने के लिए एक स्ट्रिंग को geocode करने की कोशिश कर रहा हूं लेकिन मेरा प्रोग्राम हमेशा क्रैश हो जाता है क्योंकि जब भी मैं getFromLocationName() का उपयोग करने का प्रयास करता हूं तो यह null देता है। मैं इसे घंटों तक ठीक करने की कोशिश कर रहा हूं लेकिन कुछ भी काम नहीं कर रहा है। यहां मेरा कोडएंड्रॉइड जियोकोडर getFromLocationName हमेशा शून्य

public class MainActivity extends Activity { 

    private GoogleMap mMap; 

    List<Address> addresses; 
    MarkerOptions miami; 
    String myLocation = "Miami,Florida"; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (mMap == null) { 
      mMap = ((MapFragment) getFragmentManager().findFragmentById(
        R.id.map)).getMap(); 
     } 

     if (mMap != null) { 

      Geocoder geocoder = new Geocoder(this); 


      double latitude = 0; 
      double longitude = 0; 

      while(addresses==null){ 
      try { 
       addresses = geocoder.getFromLocationName(myLocation, 1); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      } 
      Address address = addresses.get(0); 
      if (addresses.size() > 0) { 
       latitude = address.getLatitude(); 
       longitude = address.getLongitude(); 
      } 
      LatLng City = new LatLng(latitude, longitude); 

      miami = new MarkerOptions().position(City).title("Miami"); 

      mMap.addMarker(miami); 

      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(City, 15)); 

     } 
} 
+0

कोई भी इस प्रश्न का उत्तर देने जा रहा है? – anishk25

उत्तर

22

जियोकोडर हमेशा एक मान नहीं देता है। आप लूप के लिए 3 बार अनुरोध भेजने का प्रयास कर सकते हैं। मैं कम से कम एक बार वापस लौटने में सक्षम होना चाहिए। यदि नहीं, तो हो सकता है कि उनका कनेक्शन समस्या हो या हो सकता है कि सर्वर जैसे अन्य समस्याएं आपके अनुरोध का उत्तर न दें। कोशिश करो और इन धागे देखें:

Geocoder doesn't always return a value और geocoder.getFromLocationName returns only null

अपडेट किया गया:

मैं थोड़ी देर के पाश भी था, लेकिन मैं 10 बार के लिए यह अधिकतम प्रयास करने के लिए इस्तेमाल किया। कभी-कभी, यह इंटरनेट से कनेक्ट होने पर भी कुछ भी वापस नहीं लौटाता है।

public JSONObject getLocationInfo() { 

     HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true"); 
     HttpClient client = new DefaultHttpClient(); 
     HttpResponse response; 
     StringBuilder stringBuilder = new StringBuilder(); 

     try { 
      response = client.execute(httpGet); 
      HttpEntity entity = response.getEntity(); 
      InputStream stream = entity.getContent(); 
      int b; 
      while ((b = stream.read()) != -1) { 
       stringBuilder.append((char) b); 
      } 
     } catch (ClientProtocolException e) { 
      } catch (IOException e) { 
     } 

     JSONObject jsonObject = new JSONObject(); 
     try { 
      jsonObject = new JSONObject(stringBuilder.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return jsonObject; 
    } 

इस प्रकार मैं इसे कहा जाता है:

JSONObject ret = getLocationInfo(); 
JSONObject location; 
String location_string; 
try { 
    location = ret.getJSONArray("results").getJSONObject(0); 
    location_string = location.getString("formatted_address"); 
    Log.d("test", "formattted address:" + location_string); 
} catch (JSONException e1) { 
    e1.printStackTrace(); 

} 

आशा इस मदद करता है फिर, मैं पता पाने के लिए हर this और अधिक विश्वसनीय तरीका इस्तेमाल किया। मैं geocoder पर भरोसा करने के लिए भी थक गया था। यह मेरे लिए काम किया। यदि आप यूआरएल को अक्षांश और देशांतर निर्देशांक के साथ प्रतिस्थापित करते हैं और एक वेब ब्राउज़र में लौटा JSON ऑब्जेक्ट देखते हैं। आप देखेंगे कि अभी क्या हुआ।

+0

लेकिन मेरे पास यह सुनिश्चित करने के लिए थोड़ी देर लूप है कि मुझे जियोकोडर के लिए एक मूल्य मिलता है, और यह हमेशा के लिए लूपिंग रखता है। – anishk25

+0

मेरा अद्यतन उत्तर देखें। उम्मीद है कि आप जो हासिल करने की कोशिश कर रहे हैं उसे हल करता है। –

+1

मुझे वही समस्या है [समस्या] (http://stackoverflow.com/questions/15110528/service-not-available-while-calling-geocoder-getfromlocation)। और मुझे पता चला कि डिवाइस पर 'नेटवर्क लोकेटर' ने कुछ कारणों से काम नहीं किया है या मार डाला है (हमारे हाथों में नहीं)। आप वास्तव में अपने डिवाइस को पुनः बूट करके इसकी पुष्टि कर सकते हैं। इसे अभी काम करना चाहिए (चूंकि 'नेटवर्क लॉकर भी पुनः बूट करता है')। –

संबंधित मुद्दे