【问题标题】:Unable to connect GoogleApiClient instance from different activity than it created无法从与其创建的活动不同的活动连接 GoogleApiClient 实例
【发布时间】:2017-07-13 13:04:14
【问题描述】:

我遇到了一些奇怪的问题。我正在onCreate() 方法中的MainActivity 类中创建GoogleApiClient 的实例。我正在登录 Google 帐户的完整信息。

MainActivity.java

GoogleApiClient google_api_client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

          google_api_client = new GoogleApiClient.Builder(getApplicationContext())
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Plus.API, Plus.PlusOptions.builder().build())
                .addScope(Plus.SCOPE_PLUS_LOGIN)
                .addScope(Plus.SCOPE_PLUS_PROFILE)
                .build();
}

    @Override
    protected void onPause() {
          MemoryStore.setGoogle_api_client(google_api_client);
          Log.d("", "isConnected=" + google_api_client.isConnected()); // Prints true.
    }

我将此实例存储在公共类中,即MemoryStore.java

MemoryStore.java

    private static GoogleApiClient google_api_client;

    public static GoogleApiClient getGoogle_api_client() {
        return google_api_client;
    }

    public static void setGoogle_api_client(GoogleApiClient client) {
        google_api_client = client;
    }

现在在另一个活动类中说FriendsListActivity.java,我将在按钮单击时断开此 GoogleApiClient。在此之前,我正在检查该实例是否在不同的类方法中连接。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d("", "isConnected=" + MemoryStore.getGoogle_api_client().isConnected()); // Prints true.
    }

    @Override
    public void onClick(View v) {
        Log.d("", "isConnected=" + MemoryStore.getGoogle_api_client().isConnected()); // Prints false.
    }

令我惊讶的是,它总是说 google_api_client is disconnected in onClick() 方法总是说 google_api_client is connected in onCreate() or onResume() method

即使我在断开连接之前检查了 AlertDialog 以确认,我也通过点击 OK 按钮获得实例 disconnected

ui线程会不会有问题?就像我从主线程以外的地方访问实例一样?


任何帮助表示赞赏。

【问题讨论】:

    标签: android multithreading connection google-api-client


    【解决方案1】:

    断开 GoogleApiClient 后,将 MemoryStore 类中的对象设置为 null。

    MemoryStore.setGoogle_api_client(null);

    当您再次需要它时,按照您在 MainActivity 中所做的方式再次设置它

    【讨论】:

    • 但我在 onClick() 方法的 FriendsListActivity 中没有得到 isConnected() = false,因此无法断开它。不确定,从它断开连接的时候开始。
    • 你是说在 onCreate() 中你得到 isConnected() 为真,但在 onClick() 中没有?
    • 是的。你读对了。我不确定,它是怎么发生的。我也不会从任何地方断开它。
    • 尝试在 MainActivity 的 onCreate() 中设置 MemoryStore.setGoogle_api_client(google_api_client); 而不是 onPause()。当您切换到另一个活动时,可能不会调用 onPause
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多