Spaces not working using the Google Places AutoComplete API

When I enter a space in my Android app, I no longer get any results in my disclosure. How can i fix this? I encode the input, so I'm not sure why it is not working ...

Before space: enter image description here

After the space: enter image description here

I looked through https://developers.google.com/places/documentation/autocomplete but I did not find anything to help me.

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import org.json.JSONObject; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.Menu; import android.widget.AutoCompleteTextView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { AutoCompleteTextView atvPlaces; PlacesTask placesTask; ParserTask parserTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); atvPlaces = (AutoCompleteTextView) findViewById(R.id.atv_places); atvPlaces.setThreshold(1); atvPlaces.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { placesTask = new PlacesTask(); placesTask.execute(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } /** A method to download json data from url */ private String downloadUrl(String strUrl) throws IOException{ String data = ""; InputStream iStream = null; HttpURLConnection urlConnection = null; try{ URL url = new URL(strUrl); // Creating an http connection to communicate with url urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while( ( line = br.readLine()) != null){ sb.append(line); } data = sb.toString(); br.close(); }catch(Exception e){ Log.d("Exception while downloading url", e.toString()); }finally{ iStream.close(); urlConnection.disconnect(); } return data; } // Fetches all places from GooglePlaces AutoComplete Web Service private class PlacesTask extends AsyncTask<String, Void, String>{ @Override protected String doInBackground(String... place) { // For storing data from web service String data = ""; // Obtain browser key from https://code.google.com/apis/console String key = "key=AIzaSyDcXFSC2I6ZqxQeAbUMFvJKMrA98217H9U"; String input=""; try { input = "input=" + URLEncoder.encode(place[0], "utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } // place type to be searched String types = "types=(regions)"; // Sensor enabled String sensor = "sensor=false"; // Building the parameters to the web service String parameters = input+"&"+types+"&"+sensor+"&"+key; // Output format String output = "json"; // Building the url to the web service String url = "https://maps.googleapis.com/maps/api/place/autocomplete/"+output+"?"+parameters; try{ // Fetching the data from we service data = downloadUrl(url); }catch(Exception e){ Log.d("Background Task",e.toString()); } return data; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); // Creating ParserTask parserTask = new ParserTask(); // Starting Parsing the JSON string returned by Web Service parserTask.execute(result); } } /** A class to parse the Google Places in JSON format */ private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{ JSONObject jObject; @Override protected List<HashMap<String, String>> doInBackground(String... jsonData) { List<HashMap<String, String>> places = null; PlaceJSONParser placeJsonParser = new PlaceJSONParser(); try{ jObject = new JSONObject(jsonData[0]); // Getting the parsed data as a List construct places = placeJsonParser.parse(jObject); }catch(Exception e){ Log.d("Exception",e.toString()); } return places; } @Override protected void onPostExecute(List<HashMap<String, String>> result) { String[] from = new String[] { "description"}; int[] to = new int[] { android.R.id.text1 }; // Creating a SimpleAdapter for the AutoCompleteTextView SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), result, android.R.layout.simple_list_item_1, from, to); // Setting the adapter atvPlaces.setAdapter(adapter); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 
+7
android autocomplete google-places-api jquery-autocomplete autocompletetextview
source share
5 answers

Try to add

 adapter.notifyDataSetChanged(); 

after

 atvPlaces.setAdapter(adapter); 
+4
source share

I was just experimenting with some search results:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=123+43+Sweden&types=%28regions%29&sensor=false&key=AIzaSyDcXFSC2I6ZqxQeAbUMFvJKMrA98217H9U

URL encoding may be incorrectly encoded. If you have something like "123+" in get, it should return the correct result, as you see above. Instead, you need to do a replacement to replace the seats instead of +.

 input=input.replace(" ","+"); 

Try to keep your encoding after your URLEncoder, but remove any risk of encoding +.

NTN

+3
source share

Try "." instead of space. You must replace the space with a period (.). If it does not work, you should try "\", as in ubuntu. May be useful

+1
source share

try replacing this line

  input = "input=" + URLEncoder.encode(place[0], "utf-8"); 

by

  input = "input=" + URLEncoder.encode(place[0]); 
+1
source share

I love the solution, there is nothing wrong with TextWatcher ().

you must use the code below In the code below, I did not override the "performFiltering" method, I added it, and my automatic full text field now works fine.

Public class CustomAutoCompleteView extends AutoCompleteTextView {

 public CustomAutoCompleteView(Context context) { super(context); // TODO Auto-generated constructor stub } public CustomAutoCompleteView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public CustomAutoCompleteView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override protected void performFiltering(final CharSequence text, final int keyCode) { String filterText = ""; super.performFiltering(filterText, keyCode); } /** * After a selection, capture the new value and append to the existing * text */ @Override protected void replaceText(final CharSequence text) { super.replaceText(text); } 

}

0
source share

All Articles