Android Google 地址自动完成 PendingResult 永远等待
Android Google address autocomplete PendingResult awaits forever
我和我的项目队友正在尝试使用 android 的 google API 来获取一个自动完成的地址。
到目前为止,我们正在尝试用一个词来测试它,而不用担心向 autoCompleteView 添加侦听器。无论如何,我们无法使我们的第一个测试工作。
我们的GoogleAPI客户端是这样设置的:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
我们有一个连接监听器,它是这样的:
@Override
public void onConnected(Bundle connectionHint) {
new GetPredictions().execute("boulevard");
}
最后(好吧,不是最后,但这是我们的代码在等待中被阻塞之前所进行的),我们的 AsyncTask class GetPredictions 有一个 doInBackground 方法,如下所示:
@Override
protected AutocompletePredictionBuffer doInBackground(String... test) {
LatLng sudOuestLyon = new LatLng(45.708931, 4.745801);
LatLng nordEstLyon = new LatLng(45.805918, 4.924447);
LatLngBounds rectangleLyon = new LatLngBounds(sudOuestLyon, nordEstLyon);
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, test[0],
rectangleLyon, null);
AutocompletePredictionBuffer autocompletePredictions = results
.await();
return autocompletePredictions;
}
调试后发现卡在了"await"(并且限时版超时)。我们尝试给它一些时间(几分钟),但应用程序无法通过此方法。研究区(rectangleLyon)是一个长方形,覆盖法国里昂市和部分周边地区。这不是一个很大的区域,也没有太多的林荫大道,所以我们认为在其中搜索 "boulevard" 会很快得到 return 结果。我们怀疑我们的 GoogleApiClient 可能配置不正确,但它可以连接,因为我们传入了仅通过 OnConnected 调用的方法,并且错误的请求不会 returned PendingResult首先,对吧?
为什么这段代码卡在 results.await()
中?
所以,经过更多搜索,问题出在清单中自动声明密钥的行。密钥声明需要有 " android:name="com.google.android.geo.API_KEY" 而不是原来的名称。
我和我的项目队友正在尝试使用 android 的 google API 来获取一个自动完成的地址。 到目前为止,我们正在尝试用一个词来测试它,而不用担心向 autoCompleteView 添加侦听器。无论如何,我们无法使我们的第一个测试工作。 我们的GoogleAPI客户端是这样设置的:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
我们有一个连接监听器,它是这样的:
@Override
public void onConnected(Bundle connectionHint) {
new GetPredictions().execute("boulevard");
}
最后(好吧,不是最后,但这是我们的代码在等待中被阻塞之前所进行的),我们的 AsyncTask class GetPredictions 有一个 doInBackground 方法,如下所示:
@Override
protected AutocompletePredictionBuffer doInBackground(String... test) {
LatLng sudOuestLyon = new LatLng(45.708931, 4.745801);
LatLng nordEstLyon = new LatLng(45.805918, 4.924447);
LatLngBounds rectangleLyon = new LatLngBounds(sudOuestLyon, nordEstLyon);
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, test[0],
rectangleLyon, null);
AutocompletePredictionBuffer autocompletePredictions = results
.await();
return autocompletePredictions;
}
调试后发现卡在了"await"(并且限时版超时)。我们尝试给它一些时间(几分钟),但应用程序无法通过此方法。研究区(rectangleLyon)是一个长方形,覆盖法国里昂市和部分周边地区。这不是一个很大的区域,也没有太多的林荫大道,所以我们认为在其中搜索 "boulevard" 会很快得到 return 结果。我们怀疑我们的 GoogleApiClient 可能配置不正确,但它可以连接,因为我们传入了仅通过 OnConnected 调用的方法,并且错误的请求不会 returned PendingResult首先,对吧?
为什么这段代码卡在 results.await()
中?
所以,经过更多搜索,问题出在清单中自动声明密钥的行。密钥声明需要有 " android:name="com.google.android.geo.API_KEY" 而不是原来的名称。