使用Facebook getProfilePictureUri()方法时出现FileNotFoundException

时间:2015-05-31 03:52:20

标签: android facebook filenotfoundexception

我真的被这个问题困扰了。 我的应用程序使用Facebook SDK,并在主要活动中附加了一个片段(PersonalFragment),其中一部分在文本视图(R.id.textView)中显示当前用户的名称,以及当前用户的名称ImageView(R.id.imageView)中的图像

我的问题是我使用以下逻辑来获取配置文件图片URI,然后使用经过验证的代码从URI获取位图。以下代码导致一个简单的:" e \ FNF异常:Profile Picture"被写入日志。

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v=inflater.inflate(R.layout.fragment_personals, container, false);


    ImageView image =(ImageView) (v.findViewById(R.id.imageView));
    if(Profile.getCurrentProfile()!=null)
    {
          try {

          Uri uri = (Profile.getCurrentProfile().getProfilePictureUri(100, 150));
              Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
              image.setImageBitmap(bitmap);
              image.setScaleType(ImageView.ScaleType.FIT_XY);
          }
        catch(FileNotFoundException f)
        {
            Log.e("FNF Exception","Profile Picture");
        }
        catch(IOException i)
        {
          Log.e("IO Exception", "Profile Picture");
        }
    }
    ((TextView)v.findViewById(R.id.textView)).setText(Profile.getCurrentProfile().getName());

可以看出,try-catch在if语句中,因此Profile.getCurrentProfile()肯定不是null。此外,代码正确地将用户的名称输入到文本视图中。只有配置文件图片代码才会抛出FileNotFoundException。

建议?

1 个答案:

答案 0 :(得分:1)

行中的uri参数

MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

旨在引用设备上的图片或使用file://content://前缀构成应用程序包的一部分。它无法用于从互联网上加载图片。

你可以改用这样的东西:

URL url = new URL(Profile.getCurrentProfile().getProfilePictureUri(100, 150).toString());
Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());

显示个人资料照片的另一种更简单的方法是使用Facebook SDK中包含的ProfilePictureView

 <com.facebook.login.widget.ProfilePictureView
   android:id="@+id/profilePicture"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content" />

((ProfilePictureView)findViewById(R.id.profilePicture)).setProfileId(
  Profile.getCurrentProfile().getId()
);