J'utilise l'intention d'avoir la place d'avoir la place. Maintenant, je veux économiser l'adresse sous forme séparée en tant que pays, ville, pincode, état. Comment puis-je obtenir tout cela de l'adresse de la place Picker?
Code: p>
public class NameOfBusinessFragment extends Fragment { int PLACE_PICKER_REQUEST = 1; int RESULT_OK = -1; PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); EditText category,location; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_name_of_business, container, false); location = (EditText)view.findViewById(R.id.location); location.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST); } catch (GooglePlayServicesRepairableException e) { Toast.makeText(getActivity(),"ServiceRepaire Exception",Toast.LENGTH_SHORT).show(); } catch (GooglePlayServicesNotAvailableException e) { Toast.makeText(getActivity(),"SeerviceNotAvailable Exception",Toast.LENGTH_SHORT).show(); } } }); return view; } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PLACE_PICKER_REQUEST) { if (resultCode == RESULT_OK) { Place place = PlacePicker.getPlace(data, getActivity()); String toastMsg = String.format("Place: %s", place.getName()); Toast.makeText(getActivity(), toastMsg, Toast.LENGTH_LONG).show(); location.setText(place.getName()); } } } }
3 Réponses :
Je pense que ce n'est pas possible avec Place Class directement, mais vous pouvez le demander à Google à partir de la latitude et de la longitude. Ci-dessous un exemple de votre méthode onactivityResult:
meilleure façon de résoudre votre problème utilise Il est Geocoder code> pour obtenir l'adresse de la latitude et de la longitude, mais si vous ne voulez pas utiliser si vous ne voulez pas l'utiliser après la solution de contournement peut vous aider.
public void getAddressDetails(Place place) {
if (place.getAddress() != null) {
String[] addressSlice = place.getAddress().toString().split(", ");
country = addressSlice[addressSlice.length - 1];
if (addressSlice.length > 1) {
String[] stateAndPostalCode = addressSlice[addressSlice.length - 2].split(" ");
if (stateAndPostalCode.length > 1) {
postalCode = stateAndPostalCode[stateAndPostalCode.length - 1];
state = "";
for (int i = 0; i < stateAndPostalCode.length - 1; i++) {
state += (i == 0 ? "" : " ") + stateAndPostalCode[i];
}
} else {
state = stateAndPostalCode[stateAndPostalCode.length - 1];
}
}
if (addressSlice.length > 2)
city = addressSlice[addressSlice.length - 3];
if (addressSlice.length == 4)
stAddress1 = addressSlice[0];
else if (addressSlice.length > 3) {
stAddress2 = addressSlice[addressSlice.length - 4];
stAddress1 = "";
for (int i = 0; i < addressSlice.length - 4; i++) {
stAddress1 += (i == 0 ? "" : ", ") + addressSlice[i];
}
}
}
if(place.getLatLng()!=null)
{
latitude = "" + place.getLatLng().latitude;
longitude = "" + place.getLatLng().longitude;
}
}
Si vous souhaitez que les composants de l'adresse de l'objet de lieu (rue, ville, pays, etc.) soient séparés, vous avez deux options.
place.getlatlng () code>. Ensuite, le géocode inversé la latitude et la longitude. Li>
- Analyser l'adresse. LI>
ol>
Maintenant, analysant une adresse n'est pas très facile. Mais le géocodage inverse la latitude et la longitude n'est pas précis. Je suggère d'analyser l'adresse. Il existe une bonne adresse d'analyse des services, et certains valident même l'adresse par rapport aux bases de données d'adresse. (Je suggère SmartyStreets . Si vous allez au SmartYSTReets Demo page, sélectionnez "Adresse Freeform" dans la liste déroulante, puis voir quel type d'information revient lorsque vous recherchez une adresse.) p>
Voici pourquoi le géocodage inversé peut être une solution médiocre. Lorsque vous inverserez le géocode, vous prenez une latitude et la longitude et la correspondez algorithmique à une adresse. Certains algorithmes correspondent à la latitude et à la longitude à l'adresse réelle la plus proche. Dans ce cas, l'adresse peut ne pas être l'adresse de votre position. D'autre part, certains algorithmes approxent une adresse qui correspondrait raisonnablement la latitude et la longitude. Dans ce cas, l'adresse peut ne pas être une adresse réelle. Une autre complication est mentionnée dans Documentation pour getlatlng () code>: p>
L'emplacement n'est pas nécessairement le centre de la place, ni tout point d'entrée ou de sortie particulier, mais un point choisi arbitratrairement dans l'étendue géographique de l'endroit. P>
BlockQuote>
Parce que la latitude et la longitude sont des points arbitraires dans l'étendue géographique de l'endroit, il est difficile de faire des algorithmes de géocodage inverse-géocodage digne de confiance. P>
Mais, vous ne vous souciez pas de l'exactitude. Si tel est le cas & emdash; que vous souhaitez une adresse "assez proche", le géocodage inverse pourrait être un bon choix. P>
Autre chose à noter: P>
Place statique Mouvement (intention intention, contexte context)
Cette méthode a été obsolète. Utilisez GetPlace (contexte, intention) à la place. P>
blockQquote>
Je pense que vous devriez remplacer votre ligne: p> xxx pré> avec ceci: p>
Place place = PlacePicker.getPlace(getActivity(), data);