我正在开发一个应用,其中我要从firebase
检索个人资料图片,但是当转换为bitmap
格式时,它却得到了FileNotFoundException
,那么对此有什么解决方案? >
databaseReference.child(uid).child("Profile_image").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String url= (String) dataSnapshot.getValue();
Uri uri;
try {
uri = Uri.parse(url);
InputStream inputStream =getContentResolver().openInputStream(uri); //this line
Bitmap bitamp = BitmapFactory.decodeStream(inputStream);
String bitmap=saveToInternalStorage(bitamp);
loadImageFromStorage(bitmap);
}catch (NullPointerException e){
} catch (FileNotFoundException e) {
Toast.makeText(MainActivity.this, "File not Found", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
这本来是评论,但我的声誉还不够高,无法发表评论:
如果您的String url
是Firebase存储的http网址,则Uri.parse(url)
不会为您提供正确的Uri。根据我的经验,如果字符串来自Uri的Uri.parse(String stringUri)
方法,您只能确信toString()
将返回正确的Uri。
接收无效的Uri会导致getContentResolver().openInputStream(uri)
崩溃,如您所说。
话虽如此,如果您将Uri作为字符串存储在数据库中,则需要获取该字符串值并在其上使用Uri.parse(String stringUri)
,而不是在http url上调用该方法。
答案 1 :(得分:0)
我认为您必须直接使用毕加索 Picasso.get()。load(uri).into(target);