2017-09-22 63 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 **代替。 –