V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lixyz
V2EX  ›  Android

第三方登录,导致 UI 更新失败

  •  
  •   lixyz · 2019-05-03 12:27:32 +08:00 · 3252 次点击
    这是一个创建于 1791 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业余自己写一个 APP,今天在集成 QQ/新浪微博 登录

    业务流程是这样的

    点击 QQ/微博登录按钮

    弹出一个自定义的 Dialog (调用 show 方法)

    然后新开线程,进行授权申请

    然后进入 Auth 页面,填写 QQ 帐号密码或者微博帐号密码

    授权成功,通过 Handler 发送消息

    在 handleMessage 当中更新 UI (一个 ListView 控件,用以显示 QQ/微博帐号),然后将 dialog 关闭(调用 Dialog 的 dismiss 方法)

    出现的问题是,Handler 能收到消息,但是却无法关闭 Dialog,但 ListView 控件可以更新

    有谁知道这是怎么回事儿吗?

    这是 Handler 的代码

    	public static class MyHandler extends Handler {
            private SoftReference<personalInformationActivity> personalInformationActivity;
    
            private MyHandler(personalInformationActivity personalInformationActivity) {
                this.personalInformationActivity = new SoftReference<>(personalInformationActivity);
            }
    
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                personalInformationActivity activity = personalInformationActivity.get();
                switch (msg.what) {
                    case BIND_QQ_SUCCESSFUL:
                        SharedPreferences loginConfig = activity.getSharedPreferences("LoginConfig", MODE_PRIVATE);
                        String qqName = loginConfig.getString("UserBindQQ", null);
                        String qqIcon = loginConfig.getString("UserBindQQIcon", null);
    					//更新控件数据
                        activity.childDataList.get(0).get(1).setItemName(qqName);
                        activity.childDataList.get(0).get(1).setImageUrl(qqIcon);
    					//通知 Adapter 数据发生变化
                        activity.adapter.notifyDataSetChanged();
    					//隐藏 Dialog  
                        activity.waitDialog.dismiss();
                        break;
                    case BIND_QQ_FAILED:
                        activity.waitDialog.dismiss();
                        Snackbar.make(activity.toolbar, "绑定 QQ 失败,请重试", Snackbar.LENGTH_SHORT).show();
                        break;
                    default:
                }
            }
        }
    

    我怀疑是进入 Auth 页面导致的,但是又不知道该从哪里下手寻找

    因为在解绑定的时候,同样也是一样的步骤,但是 waitDialog 却可以正常隐藏

    但是在绑定的时候,却不行,就是因为进入了第三方的 Auth 界面

    但 log 当中没有任何相关提示

    请大神指点

    第 1 条附言  ·  2019-05-03 21:17:21 +08:00
    UPDATE:
    找到问题所在了。。。
    在弹出第三方的登录界面之后,点击登录,回到原 Activity 当中,又会重新执行 onStart 方法。。。
    而我的 waitDialog 又是在这里实例化的
    自然隐藏了已经显示的 dialog 了
    这个错误太低级了。。。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1002 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.