Intereting Posts
Идентификатор регистрации равен нулю от gcm в android 2.3.3, 2.3.5, но он не является нулевым и работает в android 2.3.4, 4.0.4 WebViewClient.onPageStarted () вызывается дважды при указании несуществующего URL через WebView.loadURL () Служба перезагружается при убийстве процесса активности Android – Мигающее изображение с использованием анимации Alpha fade Адаптер массива notifyDataSetChanged () не будет работать Почему TextView (с идентификатором) автоматически сохраняет состояние? Как определить, какой файл MP3 закончился в MediaPlayer.OnCompletionListener? Как отключить предварительную загрузку в viewpager? Увеличить весь экран Android Как получить пользователя Home / Work location для пользователя в Android Приложение загружается с белым экраном в течение 3 секунд, прежде чем показывать правильный пользовательский интерфейс – используя фрагменты (без веб-просмотра) Добавление .so файлов в jniLibs в Android Studio: дубликаты файлов во время упаковки APK Включить домашнюю кнопку ActionbarSherlock, Sherlockfragment SVG для Android Shape Как настроить Eclipse Build Configurations для создания надлежащего, отлаживаемого приложения NDK?

Автозаполнение textview google places api

Я следил за этим учебным пособием, чтобы сделать текстовое изображение автозаполнения, используя google places api. Я хочу, чтобы текст автозаполнения автоматически заполнялся именами мест при вводе текста. Вышеупомянутый учебник – это именно то, что мне нужно, но оно не работает для меня. Действие автозаполнения не происходит. Может кто-нибудь предложить выход?

Вот основной вид деятельности

public class MainActivity extends Activity { AutoCompleteTextView atvPlaces; PlacesTask placesTask; ParserTask parserTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_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)); StringBuilder sb = new StringBuilder(); 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=AIzaSyBB5KBkuA4-qm8QxaXX8FhHqhHsESMdAzI"; String input=""; try { input = "input=" + URLEncoder.encode(place[0], "utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } // place type to be searched String types = "types=geocode"; // 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; } } 

Это PlaceJSONParser.java

  public class PlaceJSONParser { /** Receives a JSONObject and returns a list */ public List<HashMap<String,String>> parse(JSONObject jObject){ JSONArray jPlaces = null; try { /** Retrieves all the elements in the 'places' array */ jPlaces = jObject.getJSONArray("predictions"); } catch (JSONException e) { e.printStackTrace(); } /** Invoking getPlaces with the array of json object * where each json object represent a place */ return getPlaces(jPlaces); } private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){ int placesCount = jPlaces.length(); List<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>(); HashMap<String, String> place = null; /** Taking each place, parses and adds to list object */ for(int i=0; i<placesCount;i++){ try { /** Call getPlace with place JSON object to parse the place */ place = getPlace((JSONObject)jPlaces.get(i)); placesList.add(place); } catch (JSONException e) { e.printStackTrace(); } } return placesList; } /** Parsing the Place JSON object */ private HashMap<String, String> getPlace(JSONObject jPlace){ HashMap<String, String> place = new HashMap<String, String>(); String id=""; String reference=""; String description=""; try { description = jPlace.getString("description"); id = jPlace.getString("id"); reference = jPlace.getString("reference"); place.put("description", description); place.put("_id",id); place.put("reference",reference); } catch (JSONException e) { e.printStackTrace(); } return place; } } 

Это CustomAutoCompleteTextView.java

  public class CustomAutoCompleteTextView extends AutoCompleteTextView { public CustomAutoCompleteTextView(Context context, AttributeSet attrs) { super(context, attrs); } /** Returns the place description corresponding to the selected item */ @Override protected CharSequence convertSelectionToString(Object selectedItem) { /** Each item in the autocompetetextview suggestion list is a hashmap object */ HashMap<String, String> hm = (HashMap<String, String>) selectedItem; return hm.get("description"); } } 

Это файл манифеста

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.map5" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.map5.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

setThreshold или showDropDown на ваш showDropDown чтобы показать предложение

  atvPlaces.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event){ atvPlaces.showDropDown(); return false; } }); 

Ссылку здесь

Включить веб-службу API Google Адресов в консоли разработчиков