Android-尝试使用mGeoDataClient.getPlaceById(id)从任务获取PlaceBufferResponse,但失败
我试着用Android studio在Android中使用谷歌的GeoDataClient获取一个地方的信息。 具体地说,我已经设置了一个OnPoickListener,因此当单击一个关注点时,会显示一个标记,并显示一个信息窗口来显示详细信息。为了获得详细信息,我使用了GeoDataClient的getPlaceById(id)方法。如下图所示:Android-尝试使用mGeoDataClient.getPlaceById(id)从任务获取PlaceBufferResponse,但失败,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,我试着用Android studio在Android中使用谷歌的GeoDataClient获取一个地方的信息。 具体地说,我已经设置了一个OnPoickListener,因此当单击一个关注点时,会显示一个标记,并显示一个信息窗口来显示详细信息。为了获得详细信息,我使用了GeoDataClient的getPlaceById(id)方法。如下图所示: Task<PlaceBufferResponse> placeBufferResponseTask = mGeoDataClient.ge
Task<PlaceBufferResponse> placeBufferResponseTask = mGeoDataClient.getPlaceById(mPlaceId);
placeBufferResponseTask.addOnCompleteListener(new OnCompleteListener<PlaceBufferResponse>() {
@Override
public void onComplete(@NonNull Task<PlaceBufferResponse> task) {
try {
PlaceBufferResponse bufferResponse = task.getResult();
final Place resultPlace = bufferResponse.get(0);
placeName.setText(resultPlace.getName());
placeType.setText(resultPlace.getPlaceTypes().get(0));
placeAddress.setText(resultPlace.getAddress());
bufferResponse.release();
} catch (RuntimeException e) {
Log.e(TAG, "Place query did not complete.", e);
}
}
从代码中。有人能帮忙吗?非常感谢 您正在使用以下语句从后台线程修改UI:
placeName.setText(resultPlace.getName());
placeType.setText(resultPlace.getPlaceTypes().get(0));
placeAddress.setText(resultPlace.getAddress());
如果要执行此操作,需要使用处理程序将修改操作排队到UI线程,完整代码如下所示:
placeBufferResponseTask.addOnCompleteListener(new OnCompleteListener<PlaceBufferResponse>() {
@Override
public void onComplete(@NonNull Task<PlaceBufferResponse> task) {
try {
PlaceBufferResponse bufferResponse = task.getResult();
final Place resultPlace = bufferResponse.get(0);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
placeName.setText(resultPlace.getName());
placeType.setText(resultPlace.getPlaceTypes().get(0));
placeAddress.setText(resultPlace.getAddress());
}
};
mainHandler.post(myRunnable);
bufferResponse.release();
} catch (RuntimeException e) {
Log.e(TAG, "Place query did not complete.", e);
}
}
placeBufferResponseTask.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
试一试{
PlaceBufferResponse=task.getResult();
最终位置resultPlace=bufferResponse.get(0);
Handler mainHandler=新处理程序(Looper.getMainLooper());
Runnable myRunnable=新Runnable(){
@凌驾
公开募捐{
placeName.setText(resultPlace.getName());
placeType.setText(resultPlace.getPlaceTypes().get(0));
placeAddress.setText(resultPlace.getAddress());
}
};
mainHandler.post(myRunnable);
bufferResponse.release();
}捕获(运行时异常e){
Log.e(标记“位置查询未完成”,e);
}
}
或者您可以使用的方法
runOnUiThread
of.非常感谢,我刚刚用您的解决方案使它工作了!
placeBufferResponseTask.addOnCompleteListener(new OnCompleteListener<PlaceBufferResponse>() {
@Override
public void onComplete(@NonNull Task<PlaceBufferResponse> task) {
try {
PlaceBufferResponse bufferResponse = task.getResult();
final Place resultPlace = bufferResponse.get(0);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
placeName.setText(resultPlace.getName());
placeType.setText(resultPlace.getPlaceTypes().get(0));
placeAddress.setText(resultPlace.getAddress());
}
};
mainHandler.post(myRunnable);
bufferResponse.release();
} catch (RuntimeException e) {
Log.e(TAG, "Place query did not complete.", e);
}
}