- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用自动完成 TextView 实现 Google 地方信息建议,但它没有向我显示建议。我发现我的 API key 接受请求,但没有返回任何内容。我还完成了 API key 的计费帐户。
Main.java
public class Main extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private Button searchdonar,register;
private EditText bloodgroup;
private TextView responseview;
private AutoCompleteTextView autocompletelocation;
private PlaceAutocompleteAdapter placeAutocompleteAdapter;
private PlacesClient placesClient;
private LatLngBounds latLngBounds = new LatLngBounds(
new LatLng(-40,-168 ),new LatLng(71,136));
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchdonar = (Button) findViewById(R.id.searchdonar);
register = (Button) findViewById(R.id.register);
bloodgroup = (EditText) findViewById(R.id.bloodgroup);
// Initialize Places.
if(!Places.isInitialized()){
Places.initialize(getApplicationContext(), "API_KEY");
}
// Create a new Places client instance.
placesClient = Places.createClient(this);
initAutoCompleteTextView();
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent Intent = new Intent(Main.this,PhoneAuth.class);
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(Intent);
}
});
searchdonar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Bloodgroup = bloodgroup.getText().toString().trim().toLowerCase();
String Location = autocompletelocation.getText().toString().trim().toLowerCase();
final String bloodgroup_location = Bloodgroup + "_" + Location;
Intent Intent = new Intent(Main.this,Userprofile.class);
Intent.putExtra("bloodgroup_location",bloodgroup_location);
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(Intent);
}
});
}
private void initAutoCompleteTextView() {
autocompletelocation = findViewById(R.id.location);
autocompletelocation.setThreshold(1);
autocompletelocation.setOnItemClickListener(autocompleteClickListener);
placeAutocompleteAdapter = new PlaceAutocompleteAdapter(this, placesClient);
autocompletelocation.setAdapter(placeAutocompleteAdapter);
}
private AdapterView.OnItemClickListener autocompleteClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
try {
final AutocompletePrediction item = placeAutocompleteAdapter.getItem(i);
String placeID = null;
if (item != null) {
placeID = item.getPlaceId();
}
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.ADDRESS
, Place.Field.LAT_LNG);
FetchPlaceRequest request = null;
if (placeID != null) {
request = FetchPlaceRequest.builder(placeID, placeFields)
.build();
}
if (request != null) {
placesClient.fetchPlace(request).addOnSuccessListener(new OnSuccessListener<FetchPlaceResponse>() {
@SuppressLint("SetTextI18n")
@Override
public void onSuccess(FetchPlaceResponse task) {
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
}
PlaceAutocompleteAdapter.java
public class PlaceAutocompleteAdapter extends ArrayAdapter<AutocompletePrediction> implements Filterable {
private ArrayList<AutocompletePrediction> mResultList;
private PlacesClient placesClient;
PlaceAutocompleteAdapter(Context context, PlacesClient placesClient) {
super(context, android.R.layout.simple_expandable_list_item_2, android.R.id.text1);
this.placesClient = placesClient;
}
@Override
public int getCount() {
return mResultList.size();
}
@Override
public AutocompletePrediction getItem(int position) {
return mResultList.get(position);
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
View row = super.getView(position, convertView, parent);
AutocompletePrediction item = getItem(position);
TextView textView1 = row.findViewById(android.R.id.text1);
TextView textView2 = row.findViewById(android.R.id.text2);
if (item != null) {
textView1.setText(item.getPrimaryText(null));
textView2.setText(item.getSecondaryText(null));
}
return row;
}
@NonNull
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults results = new FilterResults();
// We need a separate list to store the results, since
// this is run asynchronously.
ArrayList<AutocompletePrediction> filterData = new ArrayList<>();
// Skip the autocomplete query if no constraints are given.
if (charSequence != null) {
// Query the autocomplete API for the (constraint) search string.
filterData = getAutocomplete(charSequence);
}
results.values = filterData;
if (filterData != null) {
results.count = filterData.size();
} else {
results.count = 0;
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
if (results != null && results.count > 0) {
// The API returned at least one result, update the data.
mResultList = (ArrayList<AutocompletePrediction>) results.values;
notifyDataSetChanged();
} else {
// The API did not return any results, invalidate the data set.
notifyDataSetInvalidated();
}
}
@Override
public CharSequence convertResultToString(Object resultValue) {
// Override this method to display a readable result in the AutocompleteTextView
// when clicked.
if (resultValue instanceof AutocompletePrediction) {
return ((AutocompletePrediction) resultValue).getFullText(null);
} else {
return super.convertResultToString(resultValue);
}
}
};
}
private ArrayList<AutocompletePrediction> getAutocomplete(CharSequence constraint) {
//Create a RectangularBounds object.
RectangularBounds bounds = RectangularBounds.newInstance(
new LatLng(-40, -80),
new LatLng(70, 168));
final FindAutocompletePredictionsRequest.Builder requestBuilder =
FindAutocompletePredictionsRequest.builder()
.setQuery(constraint.toString())
.setCountry("") //Use only in specific country
// Call either setLocationBias() OR setLocationRestriction().
.setLocationBias(bounds)
.setSessionToken(AutocompleteSessionToken.newInstance())
.setTypeFilter(TypeFilter.ADDRESS);
Task<FindAutocompletePredictionsResponse> results =
placesClient.findAutocompletePredictions(requestBuilder.build());
//Wait to get results.
try {
Tasks.await(results, 1, TimeUnit.SECONDS);
} catch (ExecutionException | InterruptedException | TimeoutException e) {
e.printStackTrace();
}
if (results.isSuccessful()) {
if (results.getResult() != null) {
return (ArrayList<AutocompletePrediction>) results.getResult().getAutocompletePredictions();
}
return null;
} else {
return null;
}
}
}
Logcat 向我展示了这个:
An exception occurred during performFiltering()!
java.lang.ClassCastException:
com.google.android.libraries.places.internal.hm cannot be cast to java.util.ArrayList
at com.example.istiaque.donateblood.PlaceAutocompleteAdapter.getAutocomplete(PlaceAutocompleteAdapter.java:160)
at com.example.istiaque.donateblood.PlaceAutocompleteAdapter.access$000(PlaceAutocompleteAdapter.java:34)
at com.example.istiaque.donateblood.PlaceAutocompleteAdapter$1.performFiltering(PlaceAutocompleteAdapter.java:87)
at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:165)
at android.os.HandlerThread.run(HandlerThread.java:61)
最佳答案
今天您不需要创建类适配器。关于地点自动完成的教程是here
代码:
AutocompleteSupportFragment autocompleteFragment;
PlacesClient placesClient;
LatLng location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
// Initialize Places.
Places.initialize(getApplicationContext(), getString(R.string.googleMapsAPI));
// Create a new Places client instance.
placesClient = Places.createClient(this);
// Initialize the AutocompleteSupportFragment.
autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
// Specify the types of place data to return.
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
// Set up a PlaceSelectionListener to handle the response.
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
final LatLng location = place.getLatLng();
Log.i(LOG_TAG, "Place: " + place.getName() + ", " + place.getId());
getLocationPlace(place.getId());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i(LOG_TAG, "An error occurred: " + status);
}
});
}
private void getLocationPlace(final String placeId) {
// Specify the fields to return (in this example all fields are returned).
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG);
// Construct a request object, passing the place ID and fields array.
FetchPlaceRequest request = FetchPlaceRequest.builder(placeId, placeFields).build();
placesClient.fetchPlace(request).addOnSuccessListener(new OnSuccessListener<FetchPlaceResponse>() {
@Override
public void onSuccess(FetchPlaceResponse fetchPlaceResponse) {
Place place = fetchPlaceResponse.getPlace();
Log.d(LOG_TAG, "place = " + place.getLatLng());
location = place.getLatLng();
}
});
}
并在布局中添加了一个 fragment :
<fragment
android:id="@+id/autocomplete_fragment"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Address, City or Zip Code" />
希望这对您有帮助!
关于java - 如何使用 Autocompletetextview 修复 Google Places 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931848/
在通过自动完成输入框查找地址时,我试图从城市或地区获取 Place-id。问题是,当我查找任何地址时,我可以获得城市名称和其他一些详细信息(JSON 格式),但是...... 有没有办法直接从第一个查
我将 Place Picker 添加到我的 android 应用程序中。当您知道要选择的地点的地址并填写研究栏时,它就会起作用。但是我希望用户可以在使用红色选择器时选择他选择的位置,而这部分不起作用。
我已将 Jetpack Compose 从 1.1.0-beta03 升级到 1.1.0-beta04,除了需要做一些更改外什么也没发生,但现在我在“DetailScreen”上启动应用程序时出现此错
$(function () { var input = do
我正在使用Google的Place API自动填充用户键入的城市名称(网页)。加载了API,并使用语言(pt-BR)作为参数,并且使用葡萄牙语正确填充了文本框,但是执行方法getPlace()时,它将
如何将Google Place API评论从5增加到所有评论?目前,我只获得google plus商业页面的5条评论,我想获取所有评论! 有人可以帮忙吗? 最佳答案 您可以联系Google:https
https://google-developers.appspot.com/maps/documentation/javascript/examples/places-autocomplete 我有一
你们中的许多人都曾在 android 中开发过 LBS 应用程序,并且还使用了 Google Places API Web 服务来获取各个地方的信息。而且您可能还注意到,印度的数据并不准确,这意味着您
我有一个应用程序,它使用地点 API 来帮助查找目的地附近的地点(如伦敦)。我更喜欢在附近使用,因为它可以让我专注于一个区域,而且与文本搜索相比,它也更便宜。 不幸的是,我得到的答案没有多大意义。例如
关闭。这个问题是not about programming or software development .它目前不接受答案。 这个问题似乎不是关于 a specific programming
我正在尝试使用 Google Places api 来搜索位置。但不幸的是,我只收到一条响应请求被拒绝的消息。我创建了新的 API key ,但 API 访问菜单显示了一些警告图标,如下图所示,它是否
Google Place API 未获取特定地址的单位编号。 Example: 3/12 Selwyn Avenue Elwood, 3184, Mel, VIC 但有些地址它正在正确获取单元号。 E
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在为运输行业的客户构建一个网站,我正在使用 Google Places API 获取上车地点和目的地。如果接机地点是机场,则一项要求是显示“航类号”字段。 为了确定机场是否从 Google Map
我正在研究以下内容是否可行,如果可以的话,我将如何实现这一目标。 我们会从客户那里收集企业的评论,并希望将这些评论发布到他们的评论中,并将其发布到Google商家信息中。 我想知道如何使我们的网站将这
我们开发了一个用于构建旅行路线的平台。 行程计划(行程)是由用户定义的流程排序的地点组合而成的。 我们想使用Google Places API搜索地点。我们想存储一个place_id,并用它来获取行程
截至今天(2016年5月25日),Google Places API中似乎不再有user_ratings_total的数据。我用它来获得一家企业的评论总数。是否有另一种方法来获取此数据? 最佳答案 我
有没有办法让 Google Places Autocomplete 仅限于一个国家(如法国)? 我有这个:components=country:fr https://maps.googleapis.c
我正在设置一个自定义自动填充字段,在其中显示Google地方信息中的位置以及数据库中与搜索查询匹配的事件。因此,我使用Google地方信息自动填充服务来获取查询预测,而不是将地方信息自动填充功能直接插
自2014年6月24日起,Google已将reference和id字段标记为已弃用,并将其替换为一个place_id。 到目前为止,我只看到place_id的长度恰好是27个字符,但是想知道是否有任何
我是一名优秀的程序员,十分优秀!