在 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 上下文