我真的被这个问题困扰了。 我的应用程序使用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。
建议?
答案 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()
);