Android:如何在获取Google令牌的异步任务上实现回调?

卡利·阿尼(Kali Aney)

我正在尝试在我的应用程序上实现google登录。我设法登录并存储了令牌,但是由于该任务是异步的,所以我不知道它何时完成,因此我无法在其他方法中安全地使用令牌。我如何添加回调方法onPostExecute

这是代码:

 @Override
public void onConnected(Bundle bundle) {
    // onConnected indicates that an account was selected on the device, that the selected
    // account has granted any requested permissions to our app and that we were able to
    // establish a service connection to Google Play services.
    Log.d(TAG, "onConnected:" + bundle);
    mShouldResolve = false;

    mAccountName = Plus.AccountApi.getAccountName(mGoogleApiClient);

    //HERE I RETRIEVE THE TOKEN AND NEED TO IMPLEMENT CALLBACK
    new RetrieveTokenTask().execute(mAccountName);


    // Show the signed-in UI
    Intent intent = new Intent(getActivity(), MainActivity.class);
    startActivity(intent);
}

@Override
public void onClick(View v) {

    if (v.getId() == R.id.sign_in_button) {
        onSignInClicked();
    }
}

private void onSignInClicked() {
    // User clicked the sign-in button, so begin the sign-in process and automatically
    // attempt to resolve any errors that occur.
    mShouldResolve = true;
    mGoogleApiClient.connect();

    // Show a message to the user that we are signing in.
    //mStatusTextView.setText(R.string.signing_in);
    Log.i("GoogleSignIn", "in progress");
}


private class RetrieveTokenTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String accountName = params[0];
        String scopes = "oauth2:profile email";
        String token = null;
        try {
            token = GoogleAuthUtil.getToken(getActivity().getApplicationContext(), accountName, scopes);
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
        } catch (UserRecoverableAuthException e) {
            //startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
        } catch (GoogleAuthException e) {
            Log.e(TAG, e.getMessage());
        }
        return token;
    }

    @Override
    protected void onPostExecute(String token) {
        super.onPostExecute(token);
        Log.i("Token Value: ", token);
        //TODO : access token verifier https://developers.google.com/identity/sign-in/android/backend-auth
        accessToken = token;
    }
}
维斯努斯

您可以在onPostExecute方法中启动主要活动。这样,您将确保任务已执行并且即将完成。

检查一下

private class RetrieveTokenTask extends AsyncTask<String, Void, String> {

 private Callback callback;

public RetrieveTokenTask(Callback callback){
     this.callback = callback;
}

@Override
protected String doInBackground(String... params) {
    String accountName = params[0];
    String scopes = "oauth2:profile email";
    String token = null;
    try {
        token = GoogleAuthUtil.getToken(getActivity().getApplicationContext(), accountName, scopes);
    } catch (IOException e) {
        Log.e(TAG, e.getMessage());
    } catch (UserRecoverableAuthException e) {
        //startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
    } catch (GoogleAuthException e) {
        Log.e(TAG, e.getMessage());
    }
    return token;
}

@Override
protected void onPostExecute(String token) {
    super.onPostExecute(token);
    Log.i("Token Value: ", token);
    //TODO : access token verifier https://developers.google.com/identity/sign-in/android/backend-auth
    accessToken = token;
    callback.done();
}

}

//create an interface
public interface Callback{
  //create the callback method
   void done();
}

启动任务时,像这样在构造函数中传递回调接口的实例,例如

new RetrieveTokenTask(this).execute(mAccountName);

并让您的活动实现回调接口。例如MainActivity implements Callback

现在MainActivity将有一个done方法,该方法是ur回调。

我希望这个解释对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过异步回调实现未来

来自分类Dev

如何在Android中获取异步任务的结果

来自分类Dev

对如何在node.js中实现异步回调感到困惑

来自分类Dev

Android:异步任务:doInBackground在操作回调之前返回

来自分类Dev

如何在异步调用的流星方法上执行回调?

来自分类Dev

如何在Tkinter中的画布项目上实现鼠标悬停回调?

来自分类Dev

基于 WCF 任务的异步回调

来自分类Dev

如何在Android“ L”上获取最新任务?

来自分类Dev

如何在异步库的“每个”函数中定义回调?

来自分类Dev

如何在if-else语句中处理异步回调?

来自分类常见问题

如何在Playground中运行异步回调

来自分类Dev

如何在节点js中创建异步回调?

来自分类Dev

如何在Jest中测试异步XMLHttpRequest回调?

来自分类Dev

如何在if-else语句中处理异步回调?

来自分类Dev

如何在继续之前等待异步回调方法?

来自分类Dev

为什么在UI线程上实现android mediaPlayer回调?

来自分类Dev

如何使用SQLObject在连接断开事件上实现回调?

来自分类Dev

如何使用SQLObject在连接断开事件上实现回调?

来自分类Dev

如何在Pubnub的ngHistory中实现回调?

来自分类Dev

delphi / firemonkey:如何在Activity中实现回调?

来自分类Dev

如何在 RecyclerAdapter 中实现多个回调?

来自分类Dev

如何在flutter中实现多级回调?

来自分类Dev

如何在回调中实现 firebase 设置请求

来自分类Dev

如何在Android中获取具有不同ID的网址(异步任务)

来自分类Dev

如何实现recv()回调

来自分类Dev

GreenDao如何实现回调

来自分类Dev

C ++如何实现回调?

来自分类Dev

GreenDao如何实现回调

来自分类Dev

如何实现异步任务以使用异步和等待从数据库中获取数据?

Related 相关文章

热门标签

归档