2017-09-22 118 views
-11

请帮忙。我尝试实施地方选择器获取城市名称和国家。但它仍然没有结果。如何从Android Place picker中获取城市和国家?

在NewItemFragment

mAddLocation.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      //TODO QIBEE Insert 
      PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder(); 
      try { 
       Intent intent = intentBuilder.build(getActivity()); 
       getActivity().startActivityForResult(intent,REQ_CODE); 
      } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) { 
       e.printStackTrace(); 
      } 

在App.java

Geocoder geocoder; 
      List<Address> addresses; 
      geocoder = new Geocoder(getApplicationContext(), Locale.ENGLISH); 

      try { 

       addresses = geocoder.getFromLocation(latitude, longitude, 1); 

       if (addresses.size() > 0) { 

        App.getInstance().setLat(latitude); 
        App.getInstance().setLng(longitude); 

        sharedPref.edit().putString(getString(R.string.settings_account_lat), Double.toString(this.getLat())).apply(); 
        sharedPref.edit().putString(getString(R.string.settings_account_lng), Double.toString(this.getLng())).apply(); 

        App.getInstance().setArea(addresses.get(0).getAdminArea()); 
        App.getInstance().setCity(addresses.get(0).getLocality()); 
        App.getInstance().setCountry(addresses.get(0).getCountryName()); 
+1

你能告诉我们你迄今为止所尝试过的,以便我们可以帮助一点。 –

+1

https://stackoverflow.com/help/how-to-ask – gaurang

+0

你需要改变你的代码。但是你没有表现出来,所以我们可以提供帮助。 –

回答

0

PlaceAutocompleteFragmentactivity,添加一个名为com.google.android.gms.location.places.ui.PlaceAutocompleteFragment到一个XML布局的新片段。

<fragment 
    android:id="@+id/place_autocomplete_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" 
    /> 

添加PlaceSelectionListeneractivity

PlaceSelectionListener手柄响应用户的选择返回的地方。下面的代码显示了创建到fragment参考,并添加listenerPlaceAutocompleteFragment

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) 
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
    @Override 
    public void onPlaceSelected(Place place) { 
     // TODO: Get info about the selected place. 
     Log.i(TAG, "Place: " + place.getName()); 
    } 

    @Override 
    public void onError(Status status) { 
     // TODO: Handle the error. 
     Log.i(TAG, "An error occurred: " + status); 
    } 
    }); 
+0

谢谢@chandrakat sharma –

+0

如果你发现我的答案有帮助。请将其标记为已接受答案 –

2

你会得到longditute和onActivityResult latitiude和调用这个函数的getAddress与参数latitiude和longditute

public void getAddress(double lat, double lng) { 
    Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
    try { 
     List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
     Address obj = addresses.get(0); 
     String add = obj.getAddressLine(0); 
     add = add + "\n" + obj.getCountryName(); 
     add = add + "\n" + obj.getCountryCode(); 
     add = add + "\n" + obj.getAdminArea(); 
     add = add + "\n" + obj.getPostalCode(); 
     add = add + "\n" + obj.getSubAdminArea(); 
     add = add + "\n" + obj.getLocality(); 
     add = add + "\n" + obj.getSubThoroughfare(); 
     Log.v("IGA", "Address" + add); 
     // Toast.makeText(this, "Address=>" + add, 
     // Toast.LENGTH_SHORT).show(); 

     // TennisAppActivity.showDialog(add); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

}

+0

不要使用字符串连接或“+”,因为这样做会创建字符串evry时间的新实例。不好用** StringBuilder **代替。 –