Подтвердить что ты не робот

Передача объекта GoogleApiClient из одного действия в другое

Я хочу обновить свой счет для моей таблицы лидеров в другом действии, отличном от того, который создает объект GoogleApiClient obj (основное действие).

Каков наилучший способ сделать это?

Правильно ли делает правильный выбор? если да, то как вы можете это сделать, если класс является частью библиотеки.

Можете ли вы сделать статический статический? безопасно?

Любые советы о том, как достичь этого, будут отличными.

4b9b3361

Ответ 1

Хорошо, я думал, что отвечу на свой вопрос, потому что я нашел способ, который мне сейчас подходит. Это из другого ответа, найденного здесь!

Этот метод использует basegameutil, поэтому переходим от ответа Ли по ссылке. Я могу просто использовать оба моих действия для расширения BaseGameActivity и добавить необходимые методы.

Затем я создаю новый экземпляр GoogleApiClient в своем втором действии, а затем получаю клиент api следующим образом:

mGoogleApiClient = getApiClient();

Теперь я могу передать это вокруг своего второго действия и вызвать методы, как я хочу.

Как и в случае с Ли в вашем ответе, вы можете иметь несколько экземпляров клиента google api и все равно не будете просить войти в систему для каждого из них, поскольку он знает, что вы уже вошли в систему.

Ответ 2

Вы можете использовать класс Application, ориентированный на android шаблон singleton pattern, и это может быть ваш базовый класс для ваших вызовов ApiClient.

Вот ссылка на API, и вот несколько , а также аргументы, которые используют Приложение по Singleton.

Ответ 3

Мой настоящий тест: 1. Невозможно передать объект GoogleApiClient в качестве объекта для другой службы или действия, используя его как параметр Intent. 2. Позвольте использовать класс Singleton решить его, как показано ниже:  + Шаг 1: Сделать класс Singleton, который включает объект GoogleApiClient в качестве члена данных. Пожалуйста, сделайте следующее:

import com.google.android.gms.common.api.GoogleApiClient;

public class MyGoogleApiClient_Singleton {
    private static final String TAG = "MyGoogleApiClient_Singleton";
    private static MyGoogleApiClient_Singleton instance = null;

    private static GoogleApiClient mGoogleApiClient = null;

    protected MyGoogleApiClient_Singleton() {

    }

    public static MyGoogleApiClient_Singleton getInstance(GoogleApiClient aGoogleApiClient) {
        if(instance == null) {
            instance = new MyGoogleApiClient_Singleton();
            if (mGoogleApiClient == null)
                mGoogleApiClient = aGoogleApiClient;
        }
        return instance;
    }

    public GoogleApiClient get_GoogleApiClient(){
        return mGoogleApiClient;
    }
}   
  • Шаг 2. В основном классе Activity инициализируйте объект GoogleApiClient, затем вызовите getInstance с mGoogleApiClient в качестве параметра базового класса Singleton.

  • Шаг 3: В другой службе/деятельности, к которой вы хотите передать объект GoogleApiClient, просто вызовите getInstance (null) базового класса Singleton и вызовите get_GoogleApiClient для получения желаемого объекта GoogleApiClient.

Если у вас возникли проблемы, свяжитесь со мной [email protected]

Ответ 4

Если вам нужно постоянно подключаться к GoogleApiClient, то я, вероятно, сделаю одноэлементный класс для обработки вызовов GoogleApiClient (http://en.wikipedia.org/wiki/Singleton_pattern) или сделайте фоновый сервис, который будет работать для всего жизненного цикла приложения (https://developer.android.com/training/best-background.html).

Из документации разработчика:

GoogleApiClient используется с различными статическими методами. Некоторые из эти методы требуют подключения GoogleApiClient, некоторые из них будут вызовы очереди перед подключением GoogleApiClient; проверьте конкретные API, чтобы определить, нужно ли вам подключаться.

Если вам не нужно немедленно отправлять данные, то GoogleApiClient собирается поставить в очередь данные, которые будут отправлены вам, и просто отправить их в основное действие.