在 AndroidViewModel 中获取 activity 引用
Getting activity reference in AndroidViewModel
我有一个 AndroidViewModel
正在使用 GoogleSignIn
。我正在使用的 GoogleSignIn
方法需要一个 activity 上下文来执行 SilentSignIn
。我尝试使用 AndroidViewModel
提供的 Application
上下文使用 getApplication()
.
尽管它不会在 Android Studio 中引发错误
在 运行 时抛出错误:
Cannot cast application context
如何获取对使用 ViewModel 的 Activity 的引用?
public class MembersViewModel extends AndroidViewModel {
public MembersViewModel(@NonNull Application application) {
super(application);
repo = new MembersRepo(application, this);
}
public void signIn(){
Log.d(TAG, "onGetMembers: Invalid Access Token...Logging in again");
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getApplication().getString(R.string.idclient))
.requestEmail()
.build();
GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(getApplication(), gso);
我有一个 activity
,它使用 MembersFragment
,它使用 MembersViewModel
。
How can I get reference to the Activity that uses the ViewModel?
你不能。
相反,让您的 MembersViewModel
发出一个事件,您的 activity 通过执行您需要对 activity 完成的任何事情来观察和响应。 “发出一个事件”可以通过 RxJava PublishSubject
或精心构建的 LiveData
的“单一实时事件”形式。如果您使用的是 Kotlin,BroadcastChannel
是另一种可能性。
为什么不将 Context
参数解析到 signIn 方法中,这样当您调用它时,您将获得正确的 activity 上下文。
实时 public void signIn(Context context) { }
以便您可以获得正确的 activity 上下文
我有一个 AndroidViewModel
正在使用 GoogleSignIn
。我正在使用的 GoogleSignIn
方法需要一个 activity 上下文来执行 SilentSignIn
。我尝试使用 AndroidViewModel
提供的 Application
上下文使用 getApplication()
.
尽管它不会在 Android Studio 中引发错误
在 运行 时抛出错误:
Cannot cast application context
如何获取对使用 ViewModel 的 Activity 的引用?
public class MembersViewModel extends AndroidViewModel {
public MembersViewModel(@NonNull Application application) {
super(application);
repo = new MembersRepo(application, this);
}
public void signIn(){
Log.d(TAG, "onGetMembers: Invalid Access Token...Logging in again");
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getApplication().getString(R.string.idclient))
.requestEmail()
.build();
GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(getApplication(), gso);
我有一个 activity
,它使用 MembersFragment
,它使用 MembersViewModel
。
How can I get reference to the Activity that uses the ViewModel?
你不能。
相反,让您的 MembersViewModel
发出一个事件,您的 activity 通过执行您需要对 activity 完成的任何事情来观察和响应。 “发出一个事件”可以通过 RxJava PublishSubject
或精心构建的 LiveData
的“单一实时事件”形式。如果您使用的是 Kotlin,BroadcastChannel
是另一种可能性。
为什么不将 Context
参数解析到 signIn 方法中,这样当您调用它时,您将获得正确的 activity 上下文。
实时 public void signIn(Context context) { }
以便您可以获得正确的 activity 上下文