将GoogleApiClient obj从一个活动传递到另一个活动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将GoogleApiClient obj从一个活动传递到另一个活动相关的知识,希望对你有一定的参考价值。
我希望能够在创建GoogleApiClient obj(主要活动)之外的其他活动中更新我的排行榜得分。
做这个的最好方式是什么?
使obj可以成为正确的方式吗?如果是这样,如果该类是库的一部分,你怎么能这样做。
你能把obj变成静态吗?这样安全吗?
关于如何实现这一目标的任何建议都会很棒。
你可以使用Application类,一个面向android的单例模式类,它可以是你的ApiClient调用的基类。
这里是API文档的链接,这里有一些examples以及为什么使用Application over Singleton的论据。
好吧我以为我会回答我自己的问题,因为我找到了一个适合我的方法。很多这是来自另一个回答问题发现here!
这个方法使用了basegameutil,所以从Lee的链接回答我可以让我的活动扩展BaseGameActivity并添加所需的方法。
然后我在第二个活动中创建了一个新的GoogleApiClient实例,然后像这样获得api客户端:
mGoogleApiClient = getApiClient();
我现在可以在我的第二个活动中传递这个并按照我的意愿调用方法。
正如Lee States在他的回答中,你可以拥有google api客户端的多个实例,并且仍然不会被要求为每个人登录,因为它知道你已经登录了。
我的真正考验是:1。无法将GoogleApiClient作为对象传递给另一个服务或活动,将其用作Intent参数。 2.让我们使用Singleton类解决它如下:+步骤1:将包含GoogleApiClient对象的Singleton类作为数据成员。请这样做:
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对象,然后使用mGoogleApiClient作为Singleton基类的参数调用getInstance。
- 步骤3:在您想要传递GoogleApiClient对象的另一个服务/活动中,只需调用Singleton基类的getInstance(null),并调用get_GoogleApiClient以获取所需的GoogleApiClient对象。
如果您有任何问题,请联系我thienpham2008@gmail.com。
如果您需要经常连接到GoogleApiClient,那么我可能会创建一个单例类来处理GoogleApiClient调用(http://en.wikipedia.org/wiki/Singleton_pattern)或创建一个可以运行整个应用程序生命周期的后台服务(https://developer.android.com/training/best-background.html)。
From the developer documentation:
GoogleApiClient与各种静态方法一起使用。其中一些方法需要连接GoogleApiClient,有些会在连接GoogleApiClient之前将呼叫排队;检查特定的API文档以确定是否需要连接。
如果您不需要立即发送数据,GoogleApiClient将为您发送数据的队列,并将其发送到主要活动中。
以上是关于将GoogleApiClient obj从一个活动传递到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
谷歌排行榜提交分数错误:必须连接GoogleApiClient
java.lang.IllegalStateException:GoogleApiClient 尚未连接
使用 Firebase 身份验证和谷歌登录时注销时“GoogleApiClient 尚未连接”