java - Android Google Places: Not returning selected place -


followed tutorial here. http://www.startingandroid.com/google-places-api-tutorial-for-android/

however, when searching in search bar, selecting 1 suggested list, pressing pick location button, map displays user's current location , not place he/she selected. can provide solution this?

mainactivity.java

public class mainactivity extends appcompatactivity { private placepicker.intentbuilder builder; private placesautocompleteadapter mplacesadapter; private button pickerbtn; private autocompletetextview mylocation; private static final int place_picker_flag = 1;  private static final latlngbounds bounds_greater_sydney = new latlngbounds(         new latlng(-34.041458, 150.790100), new latlng(-33.682247, 151.383362)); protected googleapiclient mgoogleapiclient;  protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      mgoogleapiclient = new googleapiclient.builder(this)             .addapi(places.geo_data_api)             .build();     setcontentview(r.layout.activity_main);     builder = new placepicker.intentbuilder();     mylocation = (autocompletetextview) findviewbyid(r.id.mylocation);     mplacesadapter = new placesautocompleteadapter(this, android.r.layout.simple_list_item_1,             mgoogleapiclient, bounds_greater_sydney, null);     mylocation.setonitemclicklistener(mautocompleteclicklistener);     mylocation.setadapter(mplacesadapter);     pickerbtn = (button) findviewbyid(r.id.pickerbtn);     pickerbtn.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             try {                 builder = new placepicker.intentbuilder();                 intent intent = builder.build(mainactivity.this);                 // start intent requesting result, identified request code.                 startactivityforresult(intent, place_picker_flag);              } catch (googleplayservicesrepairableexception e) {                 googleplayservicesutil                         .geterrordialog(e.getconnectionstatuscode(), mainactivity.this, 0);             } catch (googleplayservicesnotavailableexception e) {                 toast.maketext(mainactivity.this, "google play services not available.",                         toast.length_long)                         .show();             }         }     }); }  @override protected void onactivityresult(int requestcode, int resultcode, intent data) {     super.onactivityresult(requestcode, resultcode, data);     if (resultcode == result_ok) {         switch (requestcode) {             case place_picker_flag:                 place place = placepicker.getplace(this, data);                 mylocation.settext(place.getname() + ", " + place.getaddress());                 break;         }     } }  // ahh @override protected void onstart() {     super.onstart();     mgoogleapiclient.connect(); }  @override protected void onstop() {     mgoogleapiclient.disconnect();     super.onstop(); }  private adapterview.onitemclicklistener mautocompleteclicklistener         = new adapterview.onitemclicklistener() {     @override     public void onitemclick(adapterview<?> parent, view view, int position, long id) {         final placesautocompleteadapter.placeautocomplete item = mplacesadapter.getitem(position);         final string placeid = string.valueof(item.placeid);         pendingresult<placebuffer> placeresult = places.geodataapi                 .getplacebyid(mgoogleapiclient, placeid);         placeresult.setresultcallback(mupdateplacedetailscallback);     } };  private resultcallback<placebuffer> mupdateplacedetailscallback         = new resultcallback<placebuffer>() {     @override     public void onresult(placebuffer places) {         if (!places.getstatus().issuccess()) {             log.e("place", "place query did not complete. error: " +                     places.getstatus().tostring());             return;         }         // selecting first object buffer.         final place place = places.get(0);     } }; } 

placesautocompleteadapter.java

public class placesautocompleteadapter extends arrayadapter<placesautocompleteadapter.placeautocomplete> implements filterable { private static final string tag = "placeautocomplete"; /**  * current results returned adapter.  */ private arraylist<placeautocomplete> mresultlist;  /**  * handles autocomplete requests.  */ private googleapiclient mgoogleapiclient;  /**  * bounds used places geo data autocomplete api requests.  */ private latlngbounds mbounds;  /**  * autocomplete filter used restrict queries specific set of place types.  */ private autocompletefilter mplacefilter;  /**  * initializes resource text rows , autocomplete query bounds.  *  * @see arrayadapter#arrayadapter(context, int)  */ public placesautocompleteadapter(context context, int resource, googleapiclient googleapiclient,                                  latlngbounds bounds, autocompletefilter filter) {     super(context, resource);     mgoogleapiclient = googleapiclient;     mbounds = bounds;     mplacefilter = filter; }  /**  * sets bounds subsequent queries.  */ public void setbounds(latlngbounds bounds) {     mbounds = bounds; }  /**  * returns number of results received in last autocomplete query.  */ @override public int getcount() {     return mresultlist.size(); }  /**  * returns item last autocomplete query.  */ @override public placeautocomplete getitem(int position) {     return mresultlist.get(position); }  /**  * returns filter current set of autocomplete results.  */ @override public filter getfilter() {     filter filter = new filter() {         @override         protected filterresults performfiltering(charsequence constraint) {             filterresults results = new filterresults();             // skip autocomplete query if no constraints given.             if (constraint != null) {                 // query autocomplete api (constraint) search string.                 mresultlist = getautocomplete(constraint);                 if (mresultlist != null) {                     // api returned results.                     results.values = mresultlist;                     results.count = mresultlist.size();                 }             }             return results;         }          @override         protected void publishresults(charsequence constraint, filterresults results) {             if (results != null && results.count > 0) {                 // api returned @ least 1 result, update data.                 notifydatasetchanged();             } else {                 // api did not return results, invalidate data set.                 notifydatasetinvalidated();             }         }     };     return filter; }  private arraylist<placeautocomplete> getautocomplete(charsequence constraint) {     if (mgoogleapiclient.isconnected()) {         log.i(tag, "starting autocomplete query for: " + constraint);          // submit query autocomplete api , retrieve pendingresult         // contain results when query completes.         pendingresult<autocompletepredictionbuffer> results =                 places.geodataapi                         .getautocompletepredictions(mgoogleapiclient, constraint.tostring(),                                 mbounds, mplacefilter);          // method should have been called off main ui thread. block , wait @ 60s         // result api.         autocompletepredictionbuffer autocompletepredictions = results                 .await(60, timeunit.seconds);          // confirm query completed successfully, otherwise return null         final status status = autocompletepredictions.getstatus();         if (!status.issuccess()) {             toast.maketext(getcontext(), "error contacting api: " + status.tostring(),                     toast.length_short).show();             log.e(tag, "error getting autocomplete prediction api call: " + status.tostring());             autocompletepredictions.release();             return null;         }          log.i(tag, "query completed. received " + autocompletepredictions.getcount()                 + " predictions.");          // copy results our own data structure, because can't hold onto buffer.         // autocompleteprediction objects encapsulate api response (place id , description).          iterator<autocompleteprediction> iterator = autocompletepredictions.iterator();         arraylist resultlist = new arraylist<>(autocompletepredictions.getcount());         while (iterator.hasnext()) {             autocompleteprediction prediction = iterator.next();             // details of prediction , copy new placeautocomplete object.             resultlist.add(new placeautocomplete(prediction.getplaceid(),                     prediction.getfulltext(null)));         }          // release buffer data has been copied.         autocompletepredictions.release();          return resultlist;     }     log.e(tag, "google api client not connected autocomplete query.");     return null; }  /**  * holder places geo data autocomplete api results.  */ public class placeautocomplete {      public charsequence placeid;     public charsequence description;      placeautocomplete(charsequence placeid, charsequence description) {         this.placeid = placeid;         this.description = description;     }      @override     public string tostring() {         return description.tostring();     } } } 


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -