我在 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()
。
答案 0 :(得分:1)
问题在于:
我在此getPath()
添加了profilePicPath = acct.getPhotoUrl().getPath();
。相反,我删除了它,得到了它的字符串形式,这就是我所需要的。
答案 1 :(得分:0)
您需要在Google控制台上启用G + API。
您需要初始化GoogleApiClient
@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());
}
}
希望这有帮助