Android 仅自动完成的城市
有人知道我如何过滤这个自动完成,那个用户只接收城市名称吗?只喜欢:伦敦、巴黎等,没有其他结果:“伦敦桥”、“伦敦眼”等——比如。 我在google places API中使用Autocomplete 所以我使用这个代码过滤器:Android 仅自动完成的城市,android,autocomplete,google-api,Android,Autocomplete,Google Api,有人知道我如何过滤这个自动完成,那个用户只接收城市名称吗?只喜欢:伦敦、巴黎等,没有其他结果:“伦敦桥”、“伦敦眼”等——比如。 我在google places API中使用Autocomplete 所以我使用这个代码过滤器: public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSe
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
synchronized (filterResults) {
if (constraint != null) {
getAutocomplete(constraint);
result = mPlaceAPI.autocomplete(constraint.toString());
if (result != null) {
filterResults.values = result;
filterResults.count = result.size();
}
}
return filterResults;
要获得唯一的城市名称:
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&types=(cities)");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
非常感谢:)我不知道您为什么要构建internet请求,但如果没有必要,您可以使用google Places API。 这是谷歌 在应用程序中,您只需执行几个步骤: 1) 构建并连接谷歌API客户端
googleApiClient = new GoogleApiClient.Builder(Activity.this)
.addApi(Places.GEO_DATA_API)
.build();
googleApiClient.connect();
2) 然后您有几种方法可以做到:使用自动完成意图、放置自动完成片段或创建pendingreult
然后我创建了Pendingreult
PendingResult<AutocompletePredictionBuffer> result
= Places
.GeoDataApi
.getAutocompletePredictions(googleApiClient, charSequence.toString(), null, builder.build());
pendingreult。
希望我能帮助你,如果我浪费了你的时间,我很抱歉。我不知道你为什么要建立internet请求,但如果没有必要,你可以使用google Places API。
这是谷歌
在应用程序中,您只需执行几个步骤:
1) 构建并连接谷歌API客户端
googleApiClient = new GoogleApiClient.Builder(Activity.this)
.addApi(Places.GEO_DATA_API)
.build();
googleApiClient.connect();
2) 然后您有几种方法可以做到:使用自动完成意图、放置自动完成片段或创建pendingreult
然后我创建了Pendingreult
PendingResult<AutocompletePredictionBuffer> result
= Places
.GeoDataApi
.getAutocompletePredictions(googleApiClient, charSequence.toString(), null, builder.build());
pendingreult。
希望我能帮助你,如果我浪费了你的时间,我也很抱歉。这是我的代码,我需要从结果AutoMLETE API google places获取onlt city:
主要活动:
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.build();
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
public void searchPlace(final Editable editable) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!editable.toString().equals("") && mGoogleApiClient.isConnected()) {
try {
mAutoCompleteAdapter.getFilter().filter(editable.toString());
} catch (Exception e) {
Log.e(TAG, "Exception");
另一个活动:PlaceAPI
public ArrayList<String> autocomplete (String input) {
ArrayList<String> resultList = null;
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&types=(cities)");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
URL url = new URL(sb.toString());
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
publicArrayList自动完成(字符串输入){
ArrayList resultList=null;
HttpURLConnection conn=null;
StringBuilder jsonResults=新建StringBuilder();
试一试{
StringBuilder sb=新的StringBuilder(PLACES\u API\u BASE+TYPE\u AUTOCOMPLETE+OUT\u JSON);
sb.追加(“?key=“+API_key”);
sb.append(“&types=(cities)”);
sb.append(“&input=“+urlcoder.encode”(输入,“utf8”));
URL=新URL(sb.toString());
conn=(HttpURLConnection)url.openConnection();
InputStreamReader in=新的InputStreamReader(conn.getInputStream());
适配器:
private ArrayList<String> result;
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
synchronized (filterResults) {
if (constraint != null) {
getAutocomplete(constraint);
result = mPlaceAPI.autocomplete(constraint.toString());
if (result != null) {
filterResults.values = result;
filterResults.count = result.size();
}
}
return filterResults;
}
}
@Override
protected void publishResults(CharSequence constraint, final FilterResults filterResults) {
synchronized (filterResults) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (filterResults != null && filterResults.count >= 0) {
mResultList = resultList;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
});
}
}
};
return filter;
}
私有数组列表结果;
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
已同步(filterResults){
if(约束!=null){
getAutocomplete(约束);
结果=mPlaceAPI.autocomplete(constraint.toString());
如果(结果!=null){
filterResults.values=结果;
filterResults.count=result.size();
}
}
返回过滤器结果;
}
}
@凌驾
受保护的void publishResults(CharSequence约束、最终FilterResults FilterResults){
已同步(filterResults){
mActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(filterResults!=null&&filterResults.count>=0){
mResultList=resultList;
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
});
}
}
};
回流过滤器;
}
这是我添加到AutocompletePredictionBuffer中的内容:
private ArrayList<PlaceAutocomplete> getAutocomplete(CharSequence constraint) {
if (mGoogleApiClient.isConnected()) {
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
mBounds, mPlaceFilter);
AutocompletePredictionBuffer autocompletePredictions = results.await(60, TimeUnit.SECONDS);
final Status status = autocompletePredictions.getStatus();
if (!status.isSuccess()) {
if (!mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
}
autocompletePredictions.release();
return new ArrayList<>();
}
private ArrayList getAutocomplete(字符序列约束){
if(mgoogleapClient.isConnected()){
Pendingreult结果=
Places.GeoDataApi.getAutocompletePredictions(mgoogleAppClient,constraint.toString(),
mBounds,mPlaceFilter);
AutocompletePredictionBuffer autocompletePredictions=结果。等待(60,时间单位。秒);
最终状态状态=自动完成预测。getStatus();
如果(!status.issucess()){
如果(!mgoogleapClient.isConnected()){
mGoogleApiClient.connect();
}
autocompletePredictions.release();
返回新的ArrayList();
}
这是我的代码,我需要从结果AutoMLETE API google places获取onlt city:
主要活动:
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.build();
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
public void searchPlace(final Editable editable) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!editable.toString().equals("") && mGoogleApiClient.isConnected()) {
try {
mAutoCompleteAdapter.getFilter().filter(editable.toString());
} catch (Exception e) {
Log.e(TAG, "Exception");
另一个活动:PlaceAPI
public ArrayList<String> autocomplete (String input) {
ArrayList<String> resultList = null;
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&types=(cities)");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
URL url = new URL(sb.toString());
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
publicArrayList自动完成(字符串输入){
ArrayList resultList=null;
HttpURLConnection conn=null;
StringBuilder jsonResults=新建StringBuilder();
试一试{
StringBuilder sb=新的StringBuilder(PLACES\u API\u BASE+TYPE\u AUTOCOMPLETE+OUT\u JSON);
sb.追加(“?key=“+API_key”);
sb.append(“&types=(cities)”);
sb.append(“&input=“+urlcoder.encode”(输入,“utf8”));
URL=新URL(sb.toString());
conn=(HttpURLConnection)url.openConnection();
InputStreamReader in=新的InputStreamReader(conn.getInputStream());
适配器:
private ArrayList<String> result;
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
synchronized (filterResults) {
if (constraint != null) {
getAutocomplete(constraint);
result = mPlaceAPI.autocomplete(constraint.toString());
if (result != null) {
filterResults.values = result;
filterResults.count = result.size();
}
}
return filterResults;
}
}
@Override
protected void publishResults(CharSequence constraint, final FilterResults filterResults) {
synchronized (filterResults) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (filterResults != null && filterResults.count >= 0) {
mResultList = resultList;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
});
}
}
};
return filter;
}
私有数组列表结果;
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
已同步(filterResults){
if(约束!=null){
getAutocomplete(约束);
结果=mPlaceAPI.autocomplete(constraint.toString());
如果(结果!=null){
filterResults.values=结果;
filterResults.count=result.size();
}
}
返回过滤器结果;
}
}
@凌驾
受保护的void publishResults(CharSequence约束、最终FilterResults FilterResults){
已同步(filterResults){
mActivity.runOnUiThread(新Runnabl