Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getPlaceByID()始终失败,java.lang.IllegalArgumentException:缓冲区已关闭_Android_Google Places Api - Fatal编程技术网

Android getPlaceByID()始终失败,java.lang.IllegalArgumentException:缓冲区已关闭

Android getPlaceByID()始终失败,java.lang.IllegalArgumentException:缓冲区已关闭,android,google-places-api,Android,Google Places Api,我正在使用Google Places API,需要使用Place ID检索位置详细信息。我正在尝试调用方法getPlaceById(),但总是失败。这是日志: java.lang.IllegalArgumentException: Buffer is closed. at com.google.android.gms.common.data.DataHolder.zzg(Unknown Source) at com.google.android.gms.common.data.DataHolde

我正在使用Google Places API,需要使用Place ID检索位置详细信息。我正在尝试调用方法
getPlaceById()
,但总是失败。这是日志:

java.lang.IllegalArgumentException: Buffer is closed.
at com.google.android.gms.common.data.DataHolder.zzg(Unknown Source)
at com.google.android.gms.common.data.DataHolder.zzi(Unknown Source)
at com.google.android.gms.common.data.zzc.zzcB(Unknown Source)
at com.google.android.gms.location.places.internal.zzt.zzG(Unknown Source)
at com.google.android.gms.location.places.internal.zzb.getPlaceId(Unknown Source)
at .onPredictionSelected(CreateLocationActivity.java:181)
at .AutocompletePredictionsHelper.onItemClick(AutocompletePredictionsHelper.java:51)
at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:905)
at android.widget.AutoCompleteTextView.access$400(AutoCompleteTextView.java:90)
at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1195)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1247)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3215)
at android.widget.AbsListView$3.run(AbsListView.java:4009)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
我的代码:

public void onPredictionSelected(AutocompletePrediction prediction) {
    if (!googleApiClient.isConnected()) return;
    PendingResult<PlaceBuffer> result =
            Places.GeoDataApi.getPlaceById(googleApiClient, prediction.getPlaceId());
    result.setResultCallback(places -> {
        if (places.getCount() > 0)
            place = places.get(0);
        places.release();
    });
}
public void onPredictionSelected(自动完成预测预测){
如果(!googleApiClient.isConnected())返回;
Pendingreult结果=
Places.GeoDataApi.getPlaceById(GoogleAppClient,prediction.getPlaceId());
result.setResultCallback(位置->{
if(places.getCount()>0)
place=places.get(0);
places.release();
});
}
这很奇怪,因为GooglePlacesAPI已经正确连接。
出现此异常的可能原因是什么?

一个好的开始方法是记录发生的情况。通过如下重构if语句,可以验证操作结果是否成功:

if (places.getStatus().isSuccess() && places.getCount() > 0)
查看状态信息以了解更多信息:

String msg = places.getStatus().getStatusMessage();
Log.e(<some TAG>, "Status message: " + msg);
String msg=places.getStatus().getStatusMessage();
Log.e(,“状态消息:”+msg);

然后简单地检查LogCat的状态消息。这不是一个真正的答案,但它肯定会给您一些关于如何继续的线索。

如果您想在释放缓冲区后继续使用缓冲区中包含的对象,请在调用
release()
之前调用对象上的
freeze()

您可以随时使用
isDataValid()
确定对象是否可用。例如,
place.isDataValid()
在调用
buffer.release()
之前返回true,之后返回false。请注意,
freezed.isDataValid()
在释放缓冲区之前和之后都返回true


参考

谢谢您的回答。看起来像是在我的
onPredictionSelected()
方法之前调用了
autocompletedpredictionbuffer.release()
。这就是缓冲区关闭的原因=)