获取用户的Google个人资料图片

时间:2016-02-12 16:49:45

标签: android user-profile google-signin googlesigninaccount

我在 Android应用中使用 Google 登录,并在数据库<中保存指向个人资料图片网址的链接/强>

在过去,我会从这一个开始获取完整的URL,例如:

https://lh3.googleusercontent.com/{random stuff}/photo.jpg
https://lh4.googleusercontent.com/{random stuff}/photo.jpg
https://lh5.googleusercontent.com/{random stuff}/photo.jpg
https://lh6.googleusercontent.com/{random stuff}/photo.jpg

自从Google Play服务更新了这个(我认为在8.3?)后我才得到

/{random stuff}/photo.jpg

这显然不会链接到图片。

这是我的代码:

    GoogleSignInAccount acct = result.getSignInAccount();

    if (acct != null) 
    {
        String profilePicPath = "";
        if (acct.getPhotoUrl() != null) {
            profilePicPath = acct.getPhotoUrl().getPath();
        }
    }

我做错了什么?

编辑:我相信我做错了是我在网址后添加了getPath()

2 个答案:

答案 0 :(得分:1)

问题在于:

我在此getPath()添加了profilePicPath = acct.getPhotoUrl().getPath();。相反,我删除了它,得到了它的字符串形式,这就是我所需要的。

答案 1 :(得分:0)

您需要在Google控制台上启用G + API。

enter link description here

您需要初始化GoogleApiClient

enter link description here

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

   ......
    googleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .addScope(Plus.SCOPE_PLUS_PROFILE)
            .build();
}
@Override
public void onConnected(Bundle bundle) {

    Plus.PeopleApi.loadVisible(googleApiClient, null).setResultCallback(this);



    if (Plus.PeopleApi.getCurrentPerson(googleApiClient) != null) {
        Person person = Plus.PeopleApi.getCurrentPerson(googleApiClient);
        personNameView.setText(person.getDisplayName());
        if (person.hasImage()) {

            Person.Image image = person.getImage();


            new AsyncTask<String, Void, Bitmap>() {

                @Override
                protected Bitmap doInBackground(String... params) {

                    try {
                        URL url = new URL(params[0]);
                        InputStream in = url.openStream();
                        return BitmapFactory.decodeStream(in);
                    } catch (Exception e) {
                    /* TODO log error */
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Bitmap bitmap) {
                    personImageView.setImageBitmap(bitmap);
                }
            }.execute(image.getUrl());
        }
   }

enter link description here

希望这有帮助