【问题标题】:Android Google API Client is not ConnectingAndroid Google API 客户端未连接
【发布时间】:2016-08-27 21:02:52
【问题描述】:

大家好,我遇到的问题是,当我创建 Google Api Client 的新实例并调用方法“.connect”时,我收到一个异常,提示 GoogleApiClient 尚未连接。

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.googleApiClient = new GoogleApiClient.Builder(this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();

    //Setup LocationRequest
    this.locationRequest = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setInterval(1000 * 10)
            .setInterval(1000 * 3);

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
@Override
public void onStart(){
    super.onStart();
    this.googleApiClient.connect();
}

@Override
public void onStop(){
    super.onStop();
    this.googleApiClient.disconnect();
}

例外:

08-27 22:54:04.536 11610-11610/at.ideafactory.spotted E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: at.ideafactory.spotted, PID: 11610
                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{at.ideafactory.spotted/at.ideafactory.spotted.Activity.Main.MainActivity}: java.lang.IllegalStateException: GoogleApiClient is not connected yet.
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:156)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:157)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5872)
                                                                        at java.lang.reflect.Method.invokeNative(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:515)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
                                                                        at dalvik.system.NativeStart.main(Native Method)
                                                                     Caused by: java.lang.IllegalStateException: GoogleApiClient is not connected yet.
                                                                        at com.google.android.gms.internal.zzpy.zzd(Unknown Source)
                                                                        at com.google.android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source)
                                                                        at at.ideafactory.spotted.Activity.Main.MainActivity.onCreate(MainActivity.java:108)
                                                                        at android.app.Activity.performCreate(Activity.java:5312)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653) 
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:156) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:157) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5872) 
                                                                        at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                        at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
                                                                        at dalvik.system.NativeStart.main(Native Method) 

也许任何人都可以帮助我解决这个问题。

亲切的问候

【问题讨论】:

    标签: java android google-api-client


    【解决方案1】:

    这是因为您尝试在 onStart 中进行 connect()。在您的 onStart 和 onStop 方法中进行空检查,如下所示

    @Override
    public void onStart(){
        super.onStart();
        if(this.googleApiClient != null){
                this.googleApiClient.connect();
        }
    }
    

    同样在 onStop() 中进行空检查。

    编辑

    您应该按照以下方式进行操作。首先在您的活动中实施这些。在 OnConnected 回调中执行以下操作。

    public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener,
        GoogleApiClient.ConnectionCallbacks,
        LocationListener {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            buildGoogleApiClient();
        }
    
        @Override
        public void onConnected(@Nullable Bundle bundle) {
            Log.d(TAG, "Connection established. Fetching location ..");
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(1000);
            mLocationRequest.setFastestInterval(1000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        }
    
        @Override
        public void onLocationChanged(Location location) {
    
            Log.d("Lat: " + location.getLatitude() + "Lng : " + location.getLongitude());    
            LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
        }
    
        public synchronized void buildGoogleApiClient() {
            mGoogleApiClient = new GoogleApiClient.Builder(getBaseContext())
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
            mGoogleApiClient.connect();
        }
    
        @Override
        public void onPause() {
            super.onPause();
            //stop location updates when Activity is no longer active
            if (mGoogleApiClient != null) {
                LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
            }
        }
    }
    

    【讨论】:

    • 我已经编辑了代码,请看一下。 @DavidNagl
    • @DavidNagl 你能运行这个吗?
    • 不,这也不起作用。我现在尝试按照 Google 文档中的说明设置我的 Activity。也许这行得通...
    • 我会告诉你这是否有效@gaurav4sama
    • @DavidNagl 对不起,我忘了添加 LocationListener 回调。在此回调中,您将获得该地点的纬度和经度。我已相应地编辑了答案,请立即尝试。
    猜你喜欢
    • 2016-12-08
    • 2015-08-19
    • 1970-01-01
    • 2013-05-25
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多