Android 如何在没有这个Lint错误的情况下通过静态工厂方法传递上下文?
我正在尝试为Android 如何在没有这个Lint错误的情况下通过静态工厂方法传递上下文?,android,Android,我正在尝试为GoogleSignIn创建一个静态类,以便可以在多个片段中重用它。由于GoogleSignIn方法需要一个上下文,因此我将其传递给构造函数。 但是,它会抛出此lint错误。我应该关心通过这个构造函数传递上下文吗 Singleton类的意思是将一个类作为Singleton 由于只有一个AuthStateManager实例,并且所有变量都是private,因此可以从变量中删除static 更新 public class AuthStateManager { private
GoogleSignIn
创建一个静态类,以便可以在多个片段中重用它。由于GoogleSignIn
方法需要一个上下文,因此我将其传递给构造函数。
但是,它会抛出此lint
错误。我应该关心通过这个构造函数传递上下文吗
Singleton类的意思是将一个类作为Singleton 由于只有一个
AuthStateManager
实例,并且所有变量都是private
,因此可以从变量中删除static
更新
public class AuthStateManager {
private static final String TAG = "AuthStateManager";
private static AuthStateManager authStateManager;
private GoogleSignInClient googleSignInClient;
private GoogleSignInAccount googleSignInAccount;
private GoogleSignInOptions googleSignInOptions;
private AuthStateManager() {
googleSignInOptions = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(context.getString(R.string.idclient))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(context, googleSignInOptions);
googleSignInAccount = GoogleSignIn.getLastSignedInAccount(context);
}
public static AuthStateManager getInstance(Context context) {
if(authStateManager == null){
authStateManager = new AuthStateManager();
}
return authStateManager;
}
public String getIdToken() {
if (googleSignInAccount != null) {
return googleSignInAccount.getIdToken();
}
return null;
}
public boolean isUserSignedIn() {
if (googleSignInAccount != null) {
return true;
}
return false;
}
除了
标记
,为什么这些字段的其余部分是静态的?它们似乎不需要是静态的。如果我将其设置为非静态,我将无法在片段中访问它,如果我将AuthStateManager工厂方法设置为静态,那么我将不得不将该类的变量设置为静态,这将导致lint
错误@DIRTYDAVE,我错了,只有AuthStateManager
应该是静止的static@DIRTYDAVE我已经更新了我的答案,我没有想到将googlesign
方法放在私有构造函数中。我还在私有构造函数中添加了上下文。这里是最后一段不会抛出任何错误的代码:谢谢你的帮助。我为此挣扎了一段时间。
public class AuthStateManager {
private static final String TAG = "AuthStateManager";
private static AuthStateManager authStateManager;
private GoogleSignInClient googleSignInClient;
private GoogleSignInAccount googleSignInAccount;
private GoogleSignInOptions googleSignInOptions;
private AuthStateManager() {
googleSignInOptions = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(context.getString(R.string.idclient))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(context, googleSignInOptions);
googleSignInAccount = GoogleSignIn.getLastSignedInAccount(context);
}
public static AuthStateManager getInstance(Context context) {
if(authStateManager == null){
authStateManager = new AuthStateManager();
}
return authStateManager;
}
public String getIdToken() {
if (googleSignInAccount != null) {
return googleSignInAccount.getIdToken();
}
return null;
}
public boolean isUserSignedIn() {
if (googleSignInAccount != null) {
return true;
}
return false;
}