java - 获取帐户 android 的身份验证 token 时显示对话框

标签 java android google-api

当我的应用程序从客户管理器检索Google帐户的身份验证 token 时,我决定显示带有消息“授权”的对话框,然后我想要更新对话框设置消息“保存联系人”,并在此时执行保存联系人的长时间操作,但是当我试图在下面的代码中做到这一点时,我的身份验证对话框不会显示(需要 8 秒的黑屏,然后对话框出现一秒钟并关闭)。我正在处理程序线程中创建和更新对话框,其中绑定(bind)到 UI 线程(在 onCreate 方法中创建处理程序)。看起来 UI 线程在我创建对话框时被阻止。谢谢。 这是我的代码:

public void gotAccount(final GoogleAccountManager googleAccountManager,
        final Account account)
{

    SharedPreferences settings = getSharedPreferences(PREF, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString("accountName", account.name);
    editor.commit();
    Log.i("gotAccount","start new thread");

    new Thread(new Runnable()
    {

        public void run()
        {
            Log.i("gotAccount-Thread run()","start show loading message");
            createLoadingMessage();
            Log.i("gotAccount-Thread run()","complete show loading message");
            Log.i("gotAccount-Thread run()","start getAuthToken");
            googleAccountManager.manager
            .getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>()
            {

                @Override
                public void run(AccountManagerFuture<Bundle> future)
                {
                    try
                    {
                        Log.i("gotAccount-run()","get auth token complete");
                        Log.i("callback-run()","start get result");
                        Bundle bundle = future.getResult();

                        if (bundle.containsKey(AccountManager.KEY_INTENT))
                        {
                            Intent intent = bundle
                                    .getParcelable(AccountManager.KEY_INTENT);
                            int flags = intent.getFlags();
                            flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
                            intent.setFlags(flags);
                            startActivityForResult(intent, REQUEST_AUTHENTICATE);

                        } else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN))
                        {
                            createSaveContactsMessage();

                            setAuthToken(bundle
                                    .getString(AccountManager.KEY_AUTHTOKEN));

                            longOperation();
                            completeSave(getText(R.string.saved) + ": "
                                    + currentCount);

                        }
                    } catch (Exception e)
                    {
                        handleException(e);
                    }
                }

            },null);
        }
    }).start();
}

最佳答案

有一种更简单的方法来处理线程。例如 AsyncTask,您可以在 preExecute() 中定义进度条,在 doInBackground() 中执行需要完成的操作,并在 onPostExecute() 中删除对话框。

有关 async task 的更多信息

关于java - 获取帐户 android 的身份验证 token 时显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8306616/

相关文章:

java - 断言两个 HashMap 因断言错误而失败

java - 用于 Java EE 的 Eclipse Juno 仅在一个 Java SE 类上没有 "Run as Java Application"

android - 如何让父 View 处理所有的OnClick事件?

youtube - snippet.defaultLanguage使用哪种字符串?

php - 如何访问在 php 中命名为变量的对象属性?

react-native - 如何在 React Native 中解决 "Error from the server while geocoding...."?

java - ImageView.getWidth() 返回 0

java - 如何检测最近一次拨出电话的拨出通话时长?

android - ViewPager 向后滚动时出现 NullPointerException

android - 如果证书是从特定的自签名 CA 签名的,请检查 WebViewClient 的 onReceivedSslError() 方法