Η υπηρεσία δεν είναι διαθέσιμη, ζητώντας ταυτόχρονα geoCoder.getFromLocation ()

ψήφοι
26

Ξέρω ότι μερικές φορές google back-end υπηρεσιών δεν μπορεί να είναι διαθέσιμες.

Ως εκ τούτου ένα λύση θα ήταν να βρόχο μέχρι i πάρει τα δεδομένα.

private class getLocationDetails extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {

        Log.d(looping,  + count + );
        count++;
        double lat = Double.parseDouble(params[0]);
        double lng = Double.parseDouble(params[1]);
        List<Address> addresses = null;
        try {

            Geocoder gCoder = new Geocoder(ImageAndLocationActivity.this,
                    Locale.getDefault());
            addresses = gCoder.getFromLocation(lat, lng, 1);
            Address addr = addresses.get(0);
            user_country = addr.getCountryName();
            user_city = addr.getLocality();
            user_district = addr.getSubAdminArea();

            if (user_city == null) {

                user_city = user_district;
            }
        } catch (Exception e) {

            Log.e(Exception in getLocationDetails - , e.getMessage());
            return null;
        }

        return ;
    }

    @Override
    protected void onPostExecute(String result) {

        if (result != null) {

            Log.d(user_city = ,  + user_city);
        } else {

            new getLocationDetails().execute(CurrentLat + , CurrentLng
                    + );
        }
    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected void onProgressUpdate(Void... values) {

    }
}

Αλλά δεν είμαι σε θέση να πάρει τη θέση σε όλα:

LogCat:

02-27 16:29:49.568: D/looping(10966): 110355
02-27 16:29:49.568: E/Exception in getLocationDetails -(10966): Service not Available
02-27 16:29:49.573: D/looping(10966): 110356
02-27 16:29:49.573: E/Exception in getLocationDetails -(10966): Service not Available
02-27 16:29:49.573: D/looping(10966): 110357
02-27 16:29:49.573: E/Exception in getLocationDetails -(10966): Service not Available

και φυσικά έχω προσθέσει όλες τις απαραίτητες άδειες:

<uses-permission android:name=android.permission.INTERNET />

Προσπαθώ αυτό για το Samsung Galaxy Σημείωση GT-N7000 (4.0.4 έκδοση)

Μου διαφεύγει τις ρυθμίσεις; που σχετίζονται με τη συσκευή ή εφαρμογή; Ή αυτό συμβαίνει συνήθως; Αν ναι κάποια καλύτερη λύση για την επίλυση αυτού ??

Ευχαριστώ

Δημοσιεύθηκε 27/02/2013 στις 12:08
πηγή χρήστη
Σε άλλες γλώσσες...                            


15 απαντήσεις

ψήφοι
4

API θα ρίξει μια «υπηρεσία δεν είναι διαθέσιμη εκτός» εάν αυτή η υπηρεσία είναι διαθέσιμη στη συσκευή. Χρησιμοποιήστε τη μέθοδο isPresent()για να ελέγξετε για την ύπαρξη της υπηρεσίας.

Δείτε επίσης: http://developer.android.com/reference/android/location/Geocoder.html

Απαντήθηκε 27/02/2013 στις 12:13
πηγή χρήστη

ψήφοι
58

Ο πραγματικός λόγος για τον οποίο Geocoderδεν λειτουργούσε οφείλεται στο γεγονός ότι το NetworkLocatorσκοτώθηκε σε δράση. Πιθανώς λόγω λιγότερη μνήμη ή ίσως χρησιμοποιήσατε τη Διαχείριση Εργασιών για να σκοτώσει όλες τις υπηρεσίες;

Δεν είμαι σίγουρος, αλλά αυτό είναι μια εικασία. Έχω δει αυτό πριν. Πέρυσι έγραψα ένα μηχανισμό επανασύνδεσης να φορτώσει το NetworkLocator.apk και συνδέονται με το GeocoderService. Νομίζω ότι αυτή η αλλαγή δεν έχει συγχωνευθεί σε JellyBean έτσι το πρόβλημα παραμένει.

Αυτό μπορεί να λυθεί μόνο με επανεκκίνηση. (Η NetworkLocationServiceφορτώνεται κατά την εκκίνηση)

Επεξεργασία: Δεν θα δούμε το πρόβλημα στην JBP ή ΚΚ, η υπηρεσία αυτή κινείται προς την εφαρμογή PlayStore.

Απαντήθηκε 27/02/2013 στις 13:33
πηγή χρήστη

ψήφοι
1

χρησιμοποιούν αυτό το τέχνασμα.

απλά επεξεργαστείτε τις project.properties

# Project target
target=Google Inc.:Google APIs:16

Ο λόγος είναι ότι η τάξη Geocoder είναι παρούσα στον πυρήνα πλαίσιο του Android, αλλά εξαρτάται από τον κωδικό εισφέρει τα API της Google για να λειτουργήσει σωστά. Ακόμα κι αν AVD σας περιλαμβάνει τα API της Google, το έργο σας θα πρέπει ακόμη να κατασκευαστεί κατά της εν λόγω ειδικού στόχου κατασκευής.

Απαντήθηκε 11/03/2013 στις 15:08
πηγή χρήστη

ψήφοι
21

Εναλλακτικός τρόπος αντιμετώπισης με άμεση πρόσβαση στους χάρτες google:

    public static LatLng getLocationFromString(String address)
        throws JSONException {

    HttpGet httpGet = new HttpGet(
            "http://maps.google.com/maps/api/geocode/json?address="
                    + URLEncoder.encode(address, "UTF-8") + "&ka&sensor=false");
    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(stringBuilder.toString());

    double lng = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
            .getJSONObject("geometry").getJSONObject("location")
            .getDouble("lng");

    double lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
            .getJSONObject("geometry").getJSONObject("location")
            .getDouble("lat");

    return new LatLng(lat, lng);
}

    public static List<Address> getStringFromLocation(double lat, double lng)
        throws ClientProtocolException, IOException, JSONException {

    String address = String
            .format(Locale.ENGLISH,                                 "http://maps.googleapis.com/maps/api/geocode/json?latlng=%1$f,%2$f&sensor=true&language="
                            + Locale.getDefault().getCountry(), lat, lng);
    HttpGet httpGet = new HttpGet(address);
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    List<Address> retList = null;

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

    JSONObject jsonObject = new JSONObject(stringBuilder.toString());

    retList = new ArrayList<Address>();

    if ("OK".equalsIgnoreCase(jsonObject.getString("status"))) {
        JSONArray results = jsonObject.getJSONArray("results");
        for (int i = 0; i < results.length(); i++) {
            JSONObject result = results.getJSONObject(i);
            String indiStr = result.getString("formatted_address");
            Address addr = new Address(Locale.getDefault());
            addr.setAddressLine(0, indiStr);
            retList.add(addr);
        }
    }

    return retList;
}
Απαντήθηκε 15/07/2013 στις 12:48
πηγή χρήστη

ψήφοι
0

Είχα το ίδιο λάθος geocoder αλλά όχι του πιο πάνω εφαρμόζονται. Δεν θα τρέξει μία από τις συσκευές μου Android. Τότε θυμήθηκα ότι είχα accedently σκοτωθεί κάποια υπηρεσία σε λειτουργία. Η λύση ήταν να αφαιρέσετε την μπαταρία για μερικά δευτερόλεπτα και επαναλάβετε την εγκατάσταση. Και αυτό λειτούργησε χωρίς να αλλάξετε τον κωδικό :))

Απαντήθηκε 18/07/2013 στις 13:34
πηγή χρήστη

ψήφοι
0

Ορισμένες συσκευές δεν έχουν υποστήριξη για για Geocoder, έτσι ώστε αυτό που χρειάζεται να κάνετε είναι να δημιουργήσετε το δικό σας geocoder.

Basicaly θα πρέπει να δημιουργήσετε μια εργασία ασύγχρονη να ζητήσει google για τη διεύθυνση και τη θεραπεία την απάντηση JSON.

Χρησιμοποιώντας aquery, εγώ κάνω κάτι σαν αυτό:

public void asyncJson(String address){
        address = address.replace(" ", "+");

        String url = "http://maps.googleapis.com/maps/api/geocode/json?address="+ address +"&sensor=true";

        aq.ajax(url, JSONObject.class, new AjaxCallback<JSONObject>() {

                @Override
                public void callback(String url, JSONObject json, AjaxStatus status) {                        

                        if(json != null){

                                 //here you work with the response json
                                 JSONArray results = json.getJSONArray("results");                               
                                Toast.makeText(context, results.getJSONObject(1).getString("formatted_address"));

                        }else{                                
                                //ajax error, show error code
                                Toast.makeText(aq.getContext(), "Error:" + status.getCode(), Toast.LENGTH_LONG).show();
                        }
                }
        });        
}
Απαντήθηκε 27/11/2013 στις 16:34
πηγή χρήστη

ψήφοι
-1

Είχα το ίδιο λάθος, προσθέστε παρακάτω άδειες για την επίλυσή του.

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.INTERNET" />
Απαντήθηκε 19/08/2014 στις 09:43
πηγή χρήστη

ψήφοι
2

Η καλύτερη λύση για αυτό το πρόβλημα είναι να χρησιμοποιήσετε το ίδιο όπως το Google Geocoder θέση, εάν η αρχική Geocoder αποτύχει

List<Address> addresses = null;    
Geocoder geocoder = new Geocoder(this);
addresses = geocoder.getFromLocation(...);
if (addresses == null || addresses.isEmpty())
addresses = MyGeocoder.getFromLocation(...);


import android.location.Address;
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.AllClientPNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class MyGeocoder {

    public static List<Address> getFromLocation(double lat, double lng, int maxResult) {

        String address = String.format(Locale.ENGLISH, "http://maps.googleapis.com/maps/api/geocode/json?latlng=%1$f,%2$f&sensor=false&language=" + Locale.getDefault().getCountry(), lat, lng);
        HttpGet httpGet = new HttpGet(address);
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(AllClientPNames.USER_AGENT, "Mozilla/5.0 (Java) Gecko/20081007 java-geocoder");
        client.getParams().setIntParameter(AllClientPNames.CONNECTION_TIMEOUT, 5 * 1000);
        client.getParams().setIntParameter(AllClientPNames.SO_TIMEOUT, 25 * 1000);
        HttpResponse response;

        List<Address> retList = null;

        try {
            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            String json = EntityUtils.toString(entity, "UTF-8");

            JSONObject jsonObject = new JSONObject(json);

            retList = new ArrayList<Address>();

            if ("OK".equalsIgnoreCase(jsonObject.getString("status"))) {
                JSONArray results = jsonObject.getJSONArray("results");
                if (results.length() > 0) {
                    for (int i = 0; i < results.length() && i < maxResult; i++) {
                        JSONObject result = results.getJSONObject(i);
                        //Log.e(MyGeocoder.class.getName(), result.toString());
                        Address addr = new Address(Locale.getDefault());
                        // addr.setAddressLine(0, result.getString("formatted_address"));

                        JSONArray components = result.getJSONArray("address_components");
                        String streetNumber = "";
                        String route = "";
                        for (int a = 0; a < components.length(); a++) {
                            JSONObject component = components.getJSONObject(a);
                            JSONArray types = component.getJSONArray("types");
                            for (int j = 0; j < types.length(); j++) {
                                String type = types.getString(j);
                                if (type.equals("locality")) {
                                    addr.setLocality(component.getString("long_name"));
                                } else if (type.equals("street_number")) {
                                    streetNumber = component.getString("long_name");
                                } else if (type.equals("route")) {
                                    route = component.getString("long_name");
                                }
                            }
                        }
                        addr.setAddressLine(0, route + " " + streetNumber);

                        addr.setLatitude(result.getJSONObject("geometry").getJSONObject("location").getDouble("lat"));
                        addr.setLongitude(result.getJSONObject("geometry").getJSONObject("location").getDouble("lng"));
                        retList.add(addr);
                    }
                }
            }


        } catch (ClientProtocolException e) {
            Log.e(MyGeocoder.class.getName(), "Error calling Google geocode webservice.", e);
        } catch (IOException e) {
            Log.e(MyGeocoder.class.getName(), "Error calling Google geocode webservice.", e);
        } catch (JSONException e) {
            Log.e(MyGeocoder.class.getName(), "Error parsing Google geocode webservice response.", e);
        }

        return retList;
    }
}
Απαντήθηκε 31/10/2014 στις 08:24
πηγή χρήστη

ψήφοι
4

Επανεκκινήστε τη συσκευή και θα διορθώσει το πρόβλημα.

Απαντήθηκε 26/11/2014 στις 09:22
πηγή χρήστη

ψήφοι
1

Η υπηρεσία δεν Διαθέσιμο - Geocoder Android όταν παίρνω αυτό το σφάλμα σε ορισμένες μαγειρεμένα roms έγραψα ότι αυτή η βιβλιοθήκη ελπίζω ότι θα μπορούσε να είναι χρήσιμη. https://github.com/dnocode/gapis

Απαντήθηκε 15/03/2015 στις 15:45
πηγή χρήστη

ψήφοι
1

Είμαι με τη χρήση του κωδικού που είναι μέχρι (άμεση πρόσβαση στους Χάρτες Google) «συγχωνεύθηκε» με κωδικό Geocoder, όπως φαίνεται παρακάτω (Δώστε ιδιαίτερη προσοχή στο «προσπαθήσουμε αλιευμάτων»):

...
//address is String
if (address != null) {
    new GeocoderTask().execute(address);
}
...

// An AsyncTask class for accessing the GeoCoding Web Service
private class GeocoderTask extends AsyncTask<String, Void, List<Address>> {

    private LatLng latLng;
    private MarkerOptions markerOptions;

    @Override
    protected List<Address> doInBackground(String... locationName) {
        // Creating an instance of Geocoder class
        Geocoder geocoder = new Geocoder(getBaseContext());
        List<Address> addresses = null;

        try {
            // Getting a maximum of 3 Address that matches the input text
            addresses = geocoder.getFromLocationName(locationName[0], 3);
        } catch (IOException e) {
            e.printStackTrace();
            try {
                addresses = getLocationFromString(locationName[0]);
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            } catch (JSONException e1) {
                e1.printStackTrace();
            }

        }
        return addresses;
    }

    @Override
    protected void onPostExecute(List<Address> addresses) {

        if (addresses == null || addresses.size() == 0) {
            Toast.makeText(getBaseContext(), "No Location found",
                    Toast.LENGTH_SHORT).show();
            return;
        }

        // Clears all the existing markers on the map
        googleMap.clear();

        // Adding Markers on Google Map for each matching address
        for (int i = 0; i < addresses.size(); i++) {

            Address address = (Address) addresses.get(i);

            // Creating an instance of GeoPoint, to display in Google Map
            latLng = new LatLng(address.getLatitude(),
                    address.getLongitude());

            String addressText = String.format(
                    "%s, %s",
                    address.getMaxAddressLineIndex() > 0 ? address
                            .getAddressLine(0) : "", address
                            .getCountryName());

            markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.title(addressText);

            googleMap.addMarker(markerOptions);

            // Locate the first location
            if (i == 0) {
                CameraUpdate center = CameraUpdateFactory.newLatLng(latLng);
                CameraUpdate zoom = CameraUpdateFactory.zoomTo(13);

                googleMap.moveCamera(center);
                googleMap.animateCamera(zoom);
            }

        }

    }
}

public static LatLng getLocationFromString(String address)
    throws JSONException {

    HttpGet httpGet = new HttpGet(
        "http://maps.google.com/maps/api/geocode/json?address="
                + URLEncoder.encode(address, "UTF-8") + "&ka&sensor=false");
    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(stringBuilder.toString());

    double lng = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
        .getJSONObject("geometry").getJSONObject("location")
        .getDouble("lng");

    double lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
        .getJSONObject("geometry").getJSONObject("location")
        .getDouble("lat");

    return new LatLng(lat, lng);
}

    public static List<Address> getStringFromLocation(double lat, double lng)
    throws ClientProtocolException, IOException, JSONException {

    String address = String
        .format(Locale.ENGLISH,                                 "http://maps.googleapis.com/maps/api/geocode/json?latlng=%1$f,%2$f&sensor=true&language="
                        + Locale.getDefault().getCountry(), lat, lng);
    HttpGet httpGet = new HttpGet(address);
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    List<Address> retList = null;

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

    JSONObject jsonObject = new JSONObject(stringBuilder.toString());

    retList = new ArrayList<Address>();

    if ("OK".equalsIgnoreCase(jsonObject.getString("status"))) {
    JSONArray results = jsonObject.getJSONArray("results");
    for (int i = 0; i < results.length(); i++) {
        JSONObject result = results.getJSONObject(i);
        String indiStr = result.getString("formatted_address");
        Address addr = new Address(Locale.getDefault());
        addr.setAddressLine(0, indiStr);
        retList.add(addr);
    }
    }

    return retList;
}

Αυτό λειτούργησε εξαιρετικό για μένα, γιατί όταν Geocoder δεν λειτουργεί, μπορώ να χρησιμοποιήσω την άμεση πρόσβαση στους Χάρτες Google.

Στην υγειά σας!

Απαντήθηκε 27/03/2015 στις 13:21
πηγή χρήστη

ψήφοι
0

Για την ακόλουθη γραμμή

Geocoder gCoder = new Geocoder(context, Locale.getDefault());

Χρήση Contextτης δραστηριότητας σας και μην χρησιμοποιείτεgetApplicationContext()

Απαντήθηκε 01/03/2017 στις 10:53
πηγή χρήστη

ψήφοι
0

Είχα, επίσης, το πρόβλημα με αυτό το σφάλμα. Αυτό συνέβη όταν ενημερωθεί η συσκευή μου να Ζέφυρος πρόσφατα.

Αν κάνω επανεκκίνηση, λειτουργεί μία φορά, αλλά στη συνέχεια θα αποτύχει, και δεν λειτουργούν καθόλου στη συνέχεια.

Δημιούργησα ένα AsyncTask σαν τους άλλους ανθρώπους, που επιστρέφει μόνο τη διεύθυνση από το πρώτο αποτέλεσμα της απάντησης JSON.

Για να χρησιμοποιήσετε τον παρακάτω κώδικα, καλέστε το κατασκευασμένο με κλειδί API σας, και μπορείτε να χρησιμοποιήσετε ένα αντικείμενο Θέση ως πρώτη ύλη για την εκτέλεση της AsyncTask. Μπορείτε να εισάγετε Θέση με τα ακόλουθα. import android.location.Location;Θα πρέπει να πάρει την τρέχουσα θέση με την LocationManager, ζητώντας μια ενημέρωση σε αυτό.

    new ReverseGeoCodeTask(GOOGLE_API_KEY).execute(location);

Βεβαιωθείτε ότι έχετε αντικαταστήσει το κλειδί API με τη δική σας, αλλά και φροντίστε να το ενεργοποιήσετε στην κονσόλα cloud της Google. Αυτό είναι όπου μπορείτε να διαχειριστείτε όλα τα API της Google για το συγκεκριμένο έργο σας.

Αντιγράψτε αυτό το μάθημα ως εσωτερική κατηγορίας στη δραστηριότητα που σας χρειάζεται το αντίθετο γεωκωδικοποιημένο διεύθυνση.

/**
 * Reverse geocode request - takes a Location in as parameters,
 * and does a network request in the background to get the first address in
 * json response. The address is returned in the onPostExecute so you
 * can update the UI with it
 */

private class ReverseGeoCodeTask extends AsyncTask<Location, Void, String>{

    private final static String GEOCODE_API_ENDPOINT_BASE = "https://maps.googleapis.com/maps/api/geocode/json?latlng=";
    private final static String JSON_PROPERTY_RESULTS = "results";
    private final static String JSON_PROPERTY_FORMATTED_ADDRESS = "formatted_address";
    private final static String JSON_PROPERTY_REQUEST_STATUS = "status";
    private final static String STATUS_OK = "OK";
    private String apiKey;

    public ReverseGeoCodeTask(final String apiKey){
        this.apiKey = apiKey;
    }

    @Override
    protected String doInBackground(Location... params) {

        if(apiKey == null){
            throw new IllegalStateException("Pass in a geocode api key in the ReverseGeoCoder constructor");
        }

        Location location = params[0];
        String googleGeocodeEndpoint = GEOCODE_API_ENDPOINT_BASE + location.getLatitude() + "," + location.getLongitude() + "&key=" + apiKey;
        Log.d(TAG, "Requesting gecoding endpoint : " + googleGeocodeEndpoint);
            try {
                URL url = new URL(googleGeocodeEndpoint);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }

                JSONObject json = new JSONObject(result.toString());
                String requestStatus = json.getString(JSON_PROPERTY_REQUEST_STATUS);
                if(requestStatus.equals(STATUS_OK)){
                    JSONArray results = json.getJSONArray(JSON_PROPERTY_RESULTS);
                    if(results.length() > 0){
                        JSONObject result1 = results.getJSONObject(0);
                        String address =  result1.getString(JSON_PROPERTY_FORMATTED_ADDRESS);
                        Log.d(TAG, "First result's address : " + address );
                        return  address;


                    }
                    else{
                        Log.d(TAG, "There were no results.");
                    }
                }
                else{
                    Log.w(TAG, "Geocode request status not " + STATUS_OK + ", it was " + requestStatus );
                    Log.w(TAG, "Did you enable the geocode in the google cloud api console? Is it the right api key?");
                }


            }catch ( IOException | JSONException e){

                e.printStackTrace();
            }

        return null;
    }

    @Override
    protected void onPostExecute(String address) {
        super.onPostExecute(address);
        if(address != null){
            // update the UI here with the address, if its not null
            originEditText.setText(address);
        }
        else{
            Log.d(TAG, "Did not find an address, UI not being updated");
        }

    }
}
Απαντήθηκε 02/09/2017 στις 20:26
πηγή χρήστη

ψήφοι
0
new Volly_Services(map, "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" + mBinding.loc.getText().toString().trim() + "&key=Ap", getActivity()).vollyPostService().continueWithTask(task - > {
    mBinding.progressBaar.setVisibility(View.GONE);

    if (task.getResult() != null) {

        Log.e("<<<", "" + task.getResult());

        JSONObject jsonObject = new JSONObject("" + task.getResult());
        if ("OK".equalsIgnoreCase(jsonObject.getString("status"))) {
            JSONArray results = jsonObject.getJSONArray("results");
            if (results.length() > 0) {
                mBinding.loc.setVisibility(View.GONE);
                for (int i = 0; i < results.length(); i++) {
                    JSONObject result = results.getJSONObject(i);
                    String indiStr = result.getString("formatted_address");
                    Address addr = new Address(Locale.getDefault());

                    addr.setAddressLine(0, indiStr);
                    addr.setLocality(result.getString("name"));
                    JSONObject geometry = result.getJSONObject("geometry").getJSONObject("location");
                    addr.setLatitude(geometry.getDouble("lat"));
                    addr.setLongitude(geometry.getDouble("lng"));


                    addresses.add(addr);
                }
                adapter = new SerchLocationAdapter(getActivity(), addresses);
                mBinding.serchreg.setAdapter(adapter);
            } else {
                Toast.makeText(getActivity(), "No result found", Toast.LENGTH_LONG).show();
            }

        } else {
            Toast.makeText(getActivity(), "No result found", Toast.LENGTH_LONG).show();
        }
    } else {
        Log.e("<<<<<<", "" + task.getError().getMessage());
        Toast.makeText(getActivity(), task.getError().getMessage(), Toast.LENGTH_LONG).show();
    }
    return null;
});
Απαντήθηκε 23/03/2018 στις 12:20
πηγή χρήστη

ψήφοι
0

Είχε το ίδιο θέμα σε Android 6 . Το πρόβλημα ήταν στο άδειες App . Ακόμη και αν ο χάρτες λειτουργεί σωστά θα πρέπει να επιτρέψει την άδεια «Πάρτε θέση» στο άδειες εφαρμογών.

Η καλύτερη περίπτωση είναι πάντα να ελέγξει αυτό το δικαίωμα επιτρέπεται όταν περιμένετε να πάρετε τη θέση στο αποτέλεσμα.

Θα χρησιμοποιήσετε αυτήν τη μέθοδο για να πάρετε την πλήρη διεύθυνση από τη θέση:

public Address getFullAddress(Place place){
    Address address;

    Locale aLocale = new Locale.Builder().setLanguage("en").build();
    Geocoder geocoder = new Geocoder(this, aLocale);

    try {
        List<Address> addresses = geocoder.getFromLocation(place.getLatLng().latitude,place.getLatLng().longitude, 1);

        address = addresses.get(0);

        return address;

    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}
Απαντήθηκε 04/05/2019 στις 17:22
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more