Facebook头像无法在Android中使用Picasso下载

时间:2014-05-09 09:33:19

标签: android bitmap picasso

您好我正在尝试在android中集成Picasso库。这是我在毕加索的load方法中传递的网址。

网址:http://graph.facebook.com/244054592454345/picture?type=large

但是Picasso onBitmapFailed方法回调正在调用,这意味着它无法下载位图并将drawable值变为null。

com.squareup.picasso.Target target = new com.squareup.picasso.Target() {

@Override
public void onBitmapLoaded(Bitmap bitmap, LoadedFrom loadedFrom) {
    userProfile.setBitmap(bitmap);
    // call the Web API to register the walker here
    new AudioStreetAsyncTask(getActivity(), userProfile, getString(R.string.registration_processing_message), new TaskCompleteListener() {
        @Override
        public void onTaskCompleted(String jsonResponse) {
           Log.d(TAG, jsonResponse);
        }
    });
}

@Override
public void onBitmapFailed(Drawable drawable) {
    userProfile.setBitmap(null);
    // call the Web API to register the walker here
    new AudioStreetAsyncTask(getActivity(), userProfile, getString(R.string.registration_processing_message), new TaskCompleteListener() {
        @Override
        public void onTaskCompleted(String jsonResponse) {
           Log.d(TAG, jsonResponse);
        }
    }).execute();
}

@Override
public void onPrepareLoad(Drawable drawable) {}
};

Picasso.with(getActivity()).load(imgUrl.toString()).into(target);

我无法追踪问题为什么它失败甚至你可以看到URL是正确的但它每次都失败。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

正如@Jake Wharton所说,它正在从HTTP重定向到HTTPS,而您的客户可能并非如此 妥善处理。要么使用HTTPS请求该URL,请重定向 保持相同的协议或将OkHttp放入您的应用程序(它将遵循 跨协议重定向)。

所以要么将你的http协议更新为https,它应该可以工作。

或者您可以将此Web API称为https://graph.facebook.com/244054592454345/?fields=picture.type(large)

然后你会得到这个JSON

{
   "picture": {
      "data": {
         "is_silhouette": false,
         "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t1.0-1/s200x200/1472865_191408954385576_14109897_n.jpg"
      }
   },
   "id": "244054592454345"
}

然后从此JSON获取URL,然后使用此URL获取此用户的Facebook头像。

Picasso.with(getActivity()).load("https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t1.0-1/s200x200/1472865_191408954385576_14109897_n.jpg").into(target);