【问题标题】:Best way to fill in missing data in google sign for android在 android 的 google sign 中填写缺失数据的最佳方法
【发布时间】:2023-03-04 09:23:01
【问题描述】:

按照谷歌登录指南,我已经在我的应用程序中实现了它,它按预期工作,但是在第一次试验中,我在尝试获取配置文件时遇到了一个空异常。因此,经过一番搜索,我找到了GoogleSignInAccount getPhotoUrl() return null,在删除和添加谷歌帐户后确实出现了同步问题,我设法正确获取了照片网址。

目前我要获取的数据在 try catch 块中,如下所示:

            try{
            GoogleSignInAccount acct = result.getSignInAccount();

            //Log.d(TAG,acct.getDisplayName());
            String UserName = acct.getDisplayName();
            String UserEmail=acct.getEmail();
            String UserID=acct.getId();
            String UserPhoto = acct.getPhotoUrl().toString();;

            Log.d(TAG,UserPhoto);
            Log.d(TAG,UserName);
            Log.d(TAG,UserEmail);
            Log.d(TAG,UserID);
        }catch (Exception e){
            e.printStackTrace();

        }

我的问题是如何处理部分信息丢失的情况?我如何区分 acct.getPhotoUrl().toString();可以产生 NPE 和 acct.getDisplayName();那也可以产生NPE?

有人有想法吗?

【问题讨论】:

  • 在对可能为空的对象调用方法之前只需添加一个空检查,如文档中所述:developers.google.com/android/reference/com/google/android/gms/…
  • 所以在你的代码中,使用类似这样的东西: String UserPhoto = acct.getPhotoUrl() != null ? acct.getPhotoUrl().toString() : "";,如果用户没有照片,"" 是你想要使用的默认值。这同样适用于可能为空的任何其他字段
  • 好吧,我最终按照您的建议进行了空检查,您可以将其作为答案,我会接受它

标签: android google-signin


【解决方案1】:

已经打开了一个thread。这似乎是来自 Google 的错误。我最后还检查了每个变量,但使用了虚拟的替代值。自从我这样做后问题就消失了,并且从未使用过虚拟值,但这仍然没有说服力。

acct = result.getSignInAccount();
            String id = null;
            try {
                id = acct.getId();
            } catch (Exception e) {
                id = "socialId";
            }
            String email = null;
            try {
                email = acct.getEmail();
            } catch (Exception e) {
                email = "socialEmail";
            }
            String displayName = null;
            try {
                displayName = acct.getDisplayName();
            } catch (Exception e) {
                displayName = "socialFam";
            }
            String familyName = null;
            try {
                familyName = acct.getFamilyName();
            } catch (Exception e) {
                familyName = "socialFam";
            }
            String givenName = null;
            try {
                givenName = acct.getGivenName();
            } catch (Exception e) {
                givenName = "socialGiven";
            }
            String photoUrl = null;
            try {
                photoUrl = acct.getPhotoUrl().toString();
            } catch (Exception e) {
                photoUrl = "socialPhoto";
            }

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多