我正在开发一个应用程序,其中我检索一个配置文件图像从firebase,但同时转换成位图格式,它得到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) {
}
});
2条答案
按热度按时间c90pui9n1#
这是一个评论,但我还没有足够高的声誉来评论:
如果你的
String url
是Firebase存储的http url,那么Uri.parse(url)
不会得到正确的Uri。根据我的经验,如果字符串来自Uri的toString()
方法,你只能确信Uri.parse(String stringUri)
会返回正确的Uri。收到一个无效的Uri会导致
getContentResolver().openInputStream(uri)
崩溃,就像你说的那样。话虽如此,如果您将URI作为String存储在数据库中,那么您需要获取该String值并对其使用
Uri.parse(String stringUri)
,而不是对http url调用该方法。uklbhaso2#
我认为你必须直接使用Picasso Picasso.get().load(uri).into(target);