Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 PLACE_选择器(builder.build)(上下文)_Android_Google Maps_Google Places Api - Fatal编程技术网

ANDROID PLACE_选择器(builder.build)(上下文)

ANDROID PLACE_选择器(builder.build)(上下文),android,google-maps,google-places-api,Android,Google Maps,Google Places Api,基本上,我正在尝试为Android实现一个PLACE_PICKER,我在这里遇到了一个令人困惑的错误: int PLACE_PICKER_REQUEST = 1; PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); Context context = getApplicationContext(); startActivityForResult(builder.build(con

基本上,我正在尝试为Android实现一个PLACE_PICKER,我在这里遇到了一个令人困惑的错误:

    int PLACE_PICKER_REQUEST = 1;
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
    Context context = getApplicationContext();
    startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
错误出现在第4行:“(builder.build(context)”,我不知道为什么,我将此作为错误记录在下面: 未处理的异常:com.google.android.gms.common.googleplayservices可修复异常,com.google.android.gms.common.GooglePlayServicesNotAvailableException


多年来一直在讨论这个问题……有什么帮助吗?

看起来主要问题是您使用的是旧版本的Google Play Services。因此,为了让它为您工作,您需要更新安装在设备或模拟器上的Google Play Services版本

这也表明您没有任何代码来检查设备上是否存在所需的版本,这是您应该明确添加的内容,因为该领域的用户可能会遇到相同的问题

如果当前设备上的版本比应用程序要求的版本旧,该框架提供了一种简单的方法,可以向用户添加更新Google Play服务的提示

这里有一个简单的例子,我刚刚开始工作

首先,创建一个成员变量
status

int status;
然后,在活动的
onCreate()
中,检查Google Play服务是否可用。如果不可用,则显示提示用户升级的对话框:

    status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (status != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
            GooglePlayServicesUtil.getErrorDialog(status, this,
                    100).show();
        } 
    }
然后,当您想要显示PlacePicker时,请确保
状态
指示Google Play服务可用。如果不满足此条件,您可能还需要向用户提供一些指示(在此处添加
其他
)(还需注意额外的try/catch)

您还可以添加的另一件事是重新检查ActivityResult()中的状态,查看用户是否更新了Google Play服务。 这也是您将获得PlacePicker对话框结果的地方:

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 100){
        status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    }
    if (requestCode == 199){

        //process Intent......
        Place place = PlacePicker.getPlace(data, this);
        String toastMsg = String.format("Place: %s", place.getName());
        Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
    }
}
结果:


主要问题似乎是您使用的是较旧版本的Google Play Services。因此,为了使其适用于您,您需要更新设备或模拟器上安装的Google Play Services版本

这也表明您没有任何代码来检查设备上是否存在所需的版本,这是您应该明确添加的内容,因为该领域的用户可能会遇到相同的问题

如果当前设备上的版本比应用程序要求的版本旧,该框架提供了一种简单的方法,可以向用户添加更新Google Play服务的提示

这里有一个简单的例子,我刚刚开始工作

首先,创建一个成员变量
status

int status;
然后,在活动的
onCreate()
中,检查Google Play服务是否可用。如果不可用,则显示提示用户升级的对话框:

    status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (status != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
            GooglePlayServicesUtil.getErrorDialog(status, this,
                    100).show();
        } 
    }
然后,当您想要显示PlacePicker时,请确保
状态
指示Google Play服务可用。如果不满足此条件,您可能还需要向用户提供一些指示(在此处添加
其他
)(还需注意额外的try/catch)

您还可以添加的另一件事是重新检查ActivityResult()中的状态,查看用户是否更新了Google Play服务。 这也是您将获得PlacePicker对话框结果的地方:

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 100){
        status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    }
    if (requestCode == 199){

        //process Intent......
        Place place = PlacePicker.getPlace(data, this);
        String toastMsg = String.format("Place: %s", place.getName());
        Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
    }
}
结果:

对于片段

           try {
                int PLACE_PICKER_REQUEST = 1;
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
            }catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException ex){
                ex.printStackTrace();
            }
碎片

           try {
                int PLACE_PICKER_REQUEST = 1;
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
            }catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException ex){
                ex.printStackTrace();
            }

您的设备或模拟器上安装的Google Play Services版本似乎比您编译应用程序时使用的版本旧。您可以检查安装的版本,并将其与编译时使用的版本进行比较吗?我已将我的依赖项更新为最新版本:“compile”com.Google.android.gms:Play Services:7.5.0,我是st运气不好…(builder.build(context),仍然是问题所在。那只会增加遇到此问题的几率。在我刚刚发布的答案中添加代码,您应该会得到升级提示。一旦您升级Google Play服务,它应该对您有效!答案中的代码将使您的应用程序能够在您的用户应用程序也有同样的问题。您的设备或模拟器上安装的Google Play Services版本似乎比您编译应用程序时使用的版本要旧。能否检查安装的版本,并将其与编译时使用的版本进行比较?我已将我的依赖项更新为最新版本:“compile”com.Google.android.gms:Play-s服务:7.5.0'我仍然没有运气…(builder.build(context),仍然是问题所在。那只会增加遇到此问题的几率。在我刚刚发布的答案中添加代码,您应该会得到升级提示。一旦您升级Google Play服务,它应该对您有效!答案中的代码将使您的应用程序能够在您的用户应用程序也有同样的问题。@EuanCantley起初我错误地认为你在使用片段,所以答案是“片段模式”。我刚刚更新了答案,因为它看起来你实际上在使用一个活动。你是一个绝对的绅士,非常好用,谢谢你的好心先生。:)回答被接受。@EuanCantley起初我错误地认为你使用的是片段,所以答案是“片段模式”。我刚刚更新了答案,因为看起来你实际上在使用一个活动。你是一个绝对的绅士,这非常有效,谢谢你善良的先生。:)回答被接受。